All Posts

The same vCenter cert works for both VC/ESXi sessions. One common way to download cert is - Click on the cert in your browser (in chrome it's to the right of the address, says "Not secure") then cli... See more...
The same vCenter cert works for both VC/ESXi sessions. One common way to download cert is - Click on the cert in your browser (in chrome it's to the right of the address, says "Not secure") then click the certification path, and click "CA" to export it into a crt file.
Thanks a lot, @doskiran for the great help,  what about the ESXi server, where to down the CA root certificate for ESXi server?
Steps for Linux: ------------------- 1) Download the crt file from vCenter. i.e, Go to https://vCenter in your browser and press Enter. At the bottom right of the page, there is an option to "Do... See more...
Steps for Linux: ------------------- 1) Download the crt file from vCenter. i.e, Go to https://vCenter in your browser and press Enter. At the bottom right of the page, there is an option to "Download trusted root CA certificates." It will download the zip file, extract it, and then navigate to the "lin" folder, where it has the certificate file (i.e., "XXXXXXXX.0"). 2) Copy the cert file and save it in the "/etc/ssl/certs" folder on your client machine. 3) Add the vCenter IPaddress and hostname entry in the /etc/hosts file. ( if any DNS resolution issue) 4) Run the Python program, but make sure to pass the vCenter hostname (FQDN) instead of the IP address in the code or command. Eg: without any ssl context   from pyVim.connect import SmartConnect si = SmartConnect(host="<vCenter or ESXi hostname>", user="<username>", pwd='<password>', port=443)    
hi,  I try to find vRealize 8.0 SDK  for Visual Studio. for vra and vro.
this script is from pyvmomi. ********************************************* # python3 getallvms.py -s xxxxx -u root -p xxxxx [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to ge... See more...
this script is from pyvmomi. ********************************************* # python3 getallvms.py -s xxxxx -u root -p xxxxx [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1129) Unable to connect to host with supplied credentials below is the script i have used  to run. [serverX] [vsphere-automation-sdk-python-master]# cat try.py import requests import urllib3 from vmware.vapi.vsphere.client import create_vsphere_client session = requests.session() # Disable cert verification for demo purpose. # This is not recommended in a production environment. #session.verify = False # Disable the secure connection warning for demo purpose. # This is not recommended in a production environment. #urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) # Connect to a vCenter Server using username and password vsphere_client = create_vsphere_client(server='x.x.x.x', username='administrator@vsphere.local', password='xxxx', session=session) # List all VMs inside the vCenter Server ab=vsphere_client.vcenter.VM.list() print(ab) Traceback (most recent call last): File "/root/vsphere-automation-sdk-python-master/try.py", line 15, in <module> vsphere_client = create_vsphere_client(server='x.x.x.x', username='administrator@vsphere.local', password='xxxx', session=session) File "/usr/local/lib/python3.9/site-packages/vmware/vapi/vsphere/client.py", line 173, in create_vsphere_client return VsphereClient(session=session, server=server, username=username, File "/usr/local/lib/python3.9/site-packages/vmware/vapi/vsphere/client.py", line 116, in __init__ session_id = session_svc.create() File "/usr/local/lib/python3.9/site-packages/com/vmware/cis_client.py", line 201, in create return self._invoke('create', None) File "/usr/local/lib/python3.9/site-packages/vmware/vapi/bindings/stub.py", line 345, in _invoke return self._api_interface.native_invoke(ctx, _method_name, kwargs) File "/usr/local/lib/python3.9/site-packages/vmware/vapi/bindings/stub.py", line 266, in native_invoke method_result = self.invoke(ctx, method_id, data_val) File "/usr/local/lib/python3.9/site-packages/vmware/vapi/bindings/stub.py", line 199, in invoke return self._api_provider.invoke(self._iface_id.get_name(), File "/usr/local/lib/python3.9/site-packages/vmware/vapi/security/client/security_context_filter.py", line 101, in invoke method_result = ApiProviderFilter.invoke( File "/usr/local/lib/python3.9/site-packages/vmware/vapi/provider/filter.py", line 75, in invoke method_result = self.next_provider.invoke( File "/usr/local/lib/python3.9/site-packages/vmware/vapi/protocol/client/msg/json_connector.py", line 79, in invoke response = self._do_request(VAPI_INVOKE, ctx, params) File "/usr/local/lib/python3.9/site-packages/vmware/vapi/protocol/client/msg/json_connector.py", line 120, in _do_request http_response = self.http_provider.do_request( File "/usr/local/lib/python3.9/site-packages/vmware/vapi/protocol/client/rpc/requests_provider.py", line 95, in do_request output = self._session.request( File "/usr/local/lib/python3.9/site-packages/requests/sessions.py", line 529, in request resp = self.send(prep, **send_kwargs) File "/usr/local/lib/python3.9/site-packages/requests/sessions.py", line 645, in send r = adapter.send(request, **kwargs) File "/usr/local/lib/python3.9/site-packages/requests/adapters.py", line 517, in send raise SSLError(e, request=request) requests.exceptions.SSLError: HTTPSConnectionPool(host='x,x,x,x', port=443): Max retries exceeded with url: /api (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1129)'))) Let me know what exact steps to enable ssl for python sdk or pyvmomi.
vSphere Automation SDK works only with vCenter sessions. Because there are no public APIs for ESXi VMODL2. Hence pass vCenter credentials in the command. To run with ESXi credentials, use vSphere ... See more...
vSphere Automation SDK works only with vCenter sessions. Because there are no public APIs for ESXi VMODL2. Hence pass vCenter credentials in the command. To run with ESXi credentials, use vSphere management SDKs . i.e, pyVmomi(SOAP based) allows you to manage VMware ESXi and vCenter using Python.   pyVmomi: https://github.com/vmware/pyvmomi
The equivalent python sdk module for perl sdk module is pyVmomi. Both perl and pyVmomi are SOAP based APIs. pyVmomi allows you to manage VMware ESXi and vCenter using Python.   pyVmomi: https://g... See more...
The equivalent python sdk module for perl sdk module is pyVmomi. Both perl and pyVmomi are SOAP based APIs. pyVmomi allows you to manage VMware ESXi and vCenter using Python.   pyVmomi: https://github.com/vmware/pyvmomi  
vSphere Automation SDK works only with vCenter sessions. Because there are no public APIs for ESXi VMODL2. To achieve your task use pyVmomi. > pyVmomi(SOAP based) allows you to manage VMware ESXi ... See more...
vSphere Automation SDK works only with vCenter sessions. Because there are no public APIs for ESXi VMODL2. To achieve your task use pyVmomi. > pyVmomi(SOAP based) allows you to manage VMware ESXi and vCenter using Python. pyVmomi: https://github.com/vmware/pyvmomi Note: Mentioned perl SDK is also a SOAP-based( vSphere Web Services API) integration point for the vSphere Management SDK. Sample program to list all VMs under ESXi/vCenter: from pyVim.connect import SmartConnect import ssl s = ssl.create_default_context(purpose=ssl.Purpose.CLIENT_AUTH) s.verify_mode = ssl.CERT_NONE si = SmartConnect( host="<vCenter or ESXi server>", user="root", pwd="<passw0rd>", port=443, sslContext=s, ) content = si.RetrieveContent() for child in content.rootFolder.childEntity: if hasattr(child, "vmFolder"): datacenter = child vmFolder = datacenter.vmFolder vmList = vmFolder.childEntity for vm in vmList: summary = vm.summary print("VM Name: ", summary.config.name)      
Can some one help me on : what is the equivalent python sdk module for perl sdk module " Vim::find_entity_view() or Pyvim is same as perl Vim module. https://vdc-download.vmware.com/vmwb-repository... See more...
Can some one help me on : what is the equivalent python sdk module for perl sdk module " Vim::find_entity_view() or Pyvim is same as perl Vim module. https://vdc-download.vmware.com/vmwb-repository/dcr-public/cfe7121d-0d64-49d9-8e1f-49fdded4bfc4/7168b5b6-7cf2-41ce-8dd5-5535787b8c17/doc/viperl_advancedtopics.5.2.html As like above link want to implement on python, what is the module i will be using on python sdk 8.0.
          import requests import urllib3 import logging logging.basicConfig(filename='app.log', level=logging.DEBUG ,filemode='w', format='%(name)s - %(levelname)s - %(message)s') from vmware.v... See more...
          import requests import urllib3 import logging logging.basicConfig(filename='app.log', level=logging.DEBUG ,filemode='w', format='%(name)s - %(levelname)s - %(message)s') from vmware.vapi.vsphere.client import create_vsphere_client session = requests.session() session.verify = False urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) # ESxi 7.0 vsphere_client = create_vsphere_client(server='<ESXi 7.0 server ip>', username='root', password='x,x,x,x', session=session) ab=vsphere_client.vcenter.VM.list() print(ab)   # python3 list_vm.py Traceback (most recent call last): File "/root/vsphere-automation-sdk-python/dk_try.py", line 18, in <module> vsphere_client = create_vsphere_client(server='xxxxx', username='root', password='xxxxxx', session=session) File "/usr/local/lib/python3.9/site-packages/vmware/vapi/vsphere/client.py", line 173, in create_vsphere_client return VsphereClient(session=session, server=server, username=username, File "/usr/local/lib/python3.9/site-packages/vmware/vapi/vsphere/client.py", line 116, in __init__ session_id = session_svc.create() File "/usr/local/lib/python3.9/site-packages/com/vmware/cis_client.py", line 201, in create return self._invoke('create', None) File "/usr/local/lib/python3.9/site-packages/vmware/vapi/bindings/stub.py", line 345, in _invoke return self._api_interface.native_invoke(ctx, _method_name, kwargs) File "/usr/local/lib/python3.9/site-packages/vmware/vapi/bindings/stub.py", line 295, in native_invoke raise TypeConverter.convert_to_python(method_result.error, # pylint: disable=E0702 com.vmware.vapi.std.errors_client.OperationNotFound: {messages : [LocalizableMessage(id='vapi.provider.interface.unknown', default_message='Unknown interface: com.vmware.cis.session', args=['com.vmware.cis.session'], params=None, localized=None)], data : None, error_type : None}   similar way perl sdk works on single ESXi 6.5, 6.7 to list down vm on ESXi without any vcenter or vsphere server attached to ESXi but in python it is not working. any one have any idea.  
It worked, thanks.
The issue is not passing the right SessionManager value in tag <urn:_this type="SessionManager"> . To retrieve the SessionManager value, use the below POST SOAP API with the body and then pass the... See more...
The issue is not passing the right SessionManager value in tag <urn:_this type="SessionManager"> . To retrieve the SessionManager value, use the below POST SOAP API with the body and then pass the retrieved SessionManager value in the login API. Step#1:  POST: https://<server>/sdk Body:   <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:vim25"> <soapenv:Header /> <soapenv:Body> <urn:RetrieveServiceContent> <urn:_this type="ServiceInstance">ServiceInstance</urn:_this> </urn:RetrieveServiceContent> </soapenv:Body> </soapenv:Envelope>     Response:   <?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"...> <soapenv:Body> <RetrieveServiceContentResponse xmlns="urn:vim25"> ... <about> .... </about> ... <sessionManager type="SessionManager">ha-sessionmgr</sessionManager> ... </returnval> </RetrieveServiceContentResponse> </soapenv:Body> </soapenv:Envelope>   Step#2:  Copy the above SessionManager value i.e, "ha-sessionmgr" and update in login api. POST: https://<server>/sdk BODY:   <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:vim25"> <soapenv:Header /> <soapenv:Body> <urn:Login> <urn:_this type="SessionManager">ha-sessionmgr</urn:_this> <urn:userName>root</urn:userName> <urn:password>XXXXXXXX</urn:password> <urn:locale></urn:locale> </urn:Login> </soapenv:Body> </soapenv:Envelope>   Response:   <?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <LoginResponse xmlns="urn:vim25"> <returnval> <key>xxxxxxxx-xxxx-xxxx-xxxxx-xxxxxxxxxxxx</key> <userName>root</userName> <fullName>Administrator</fullName> <loginTime>2023-01-31T09:06:39.124597Z</loginTime> <lastActiveTime>2023-01-31T09:06:39.124615Z</lastActiveTime> <locale>en</locale> <messageLocale>en</messageLocale> </returnval> </LoginResponse> </soapenv:Body> </soapenv:Envelope>      
You are trying to log in directly to vsphere client or to vCenter?  From screenshots, I am not able to identify is this a monitoring tool or smth for network?
I am not sure if I am posting it on the right channel. The issue that I am facing is with the Esxi Webservice. I am attempting to login via web service and I don't get an OK response as shown below: ... See more...
I am not sure if I am posting it on the right channel. The issue that I am facing is with the Esxi Webservice. I am attempting to login via web service and I don't get an OK response as shown below:         Any help is much appreciated
Thanks a lot above error, [root@vmware-ub-200-251 vsphere-automation-sdk-python-master]# python3 ./samples/vsphere/vcenter/vm/list_vms.py -s x.x.x.x -u root -p QAteams1 --skipverification vcenter s... See more...
Thanks a lot above error, [root@vmware-ub-200-251 vsphere-automation-sdk-python-master]# python3 ./samples/vsphere/vcenter/vm/list_vms.py -s x.x.x.x -u root -p QAteams1 --skipverification vcenter server = x.x.xx vc username = root Traceback (most recent call last): File "./samples/vsphere/vcenter/vm/list_vms.py", line 63, in <module> main() File "./samples/vsphere/vcenter/vm/list_vms.py", line 58, in main list_vm = ListVM() File "./samples/vsphere/vcenter/vm/list_vms.py", line 43, in __init__ session=session) File "/usr/local/lib/python3.6/site-packages/vmware/vapi/vsphere/client.py", line 175, in create_vsphere_client hok_token=hok_token, private_key=private_key) File "/usr/local/lib/python3.6/site-packages/vmware/vapi/vsphere/client.py", line 116, in __init__ session_id = session_svc.create() File "/usr/local/lib/python3.6/site-packages/com/vmware/cis_client.py", line 201, in create return self._invoke('create', None) File "/usr/local/lib/python3.6/site-packages/vmware/vapi/bindings/stub.py", line 345, in _invoke return self._api_interface.native_invoke(ctx, _method_name, kwargs) File "/usr/local/lib/python3.6/site-packages/vmware/vapi/bindings/stub.py", line 266, in native_invoke method_result = self.invoke(ctx, method_id, data_val) File "/usr/local/lib/python3.6/site-packages/vmware/vapi/bindings/stub.py", line 202, in invoke ctx) File "/usr/local/lib/python3.6/site-packages/vmware/vapi/security/client/security_context_filter.py", line 102, in invoke self, service_id, operation_id, input_value, ctx) File "/usr/local/lib/python3.6/site-packages/vmware/vapi/provider/filter.py", line 76, in invoke service_id, operation_id, input_value, ctx) File "/usr/local/lib/python3.6/site-packages/vmware/vapi/protocol/client/msg/json_connector.py", line 79, in invoke response = self._do_request(VAPI_INVOKE, ctx, params) File "/usr/local/lib/python3.6/site-packages/vmware/vapi/protocol/client/msg/json_connector.py", line 127, in _do_request http_response.data.raise_for_status() File "/usr/local/lib/python3.6/site-packages/requests/models.py", line 940, in raise_for_status raise HTTPError(http_error_msg, response=self) requests.exceptions.HTTPError: 404 Client Error: Not Found for url: https://x.x.x.x/api/  
Hi All, I am trying to use below script to fetch the vm builds report for last 24hrs.However, the script doesn't fetching VM's folder & associated TAG details in the report. Any suggestions and help ... See more...
Hi All, I am trying to use below script to fetch the vm builds report for last 24hrs.However, the script doesn't fetching VM's folder & associated TAG details in the report. Any suggestions and help in fetching VM's folder & associated tag details by using Get-VIEvent cmdlet. Pls advise.   $Report1 = Foreach ($VC in $global:DefaultVIServers}) { Get-VIEvent -MaxSamples ([int]::MaxValue) -Start (Get-Date).AddDays(-1) |where {$_.Gettype().Name-eq "VmCreatedEvent" -or $_.Gettype().Name-eq "VmBeingClonedEvent" -or $_.Gettype().Name-eq "VmBeingDeployedEvent" -or $_.Gettype().Name-eq "VmRegisteredEvent"}| Select CreatedTime,UserName,@{ Name="VM"; Expression={$_.Vm.Name}},@{ Name="Folder"; Expression={(Get-VM -Name $_).Folder}},@{ Name="VeeamTag"; Expression={(Get-TagAssignment -Entity $_).Tag.Name -join '|'}}, @{ Name="CPU"; Expression={(Get-VM -Name $_.Vm.Name).NumCPU}},@{ Name="Memory"; Expression={[math]::Round(((Get-VM -Name $_.Vm.Name).MemoryMB)/1024)}},@{ Name="Provisionedspace"; Expression={(Get-VM -Name $_.Vm.Name).ProvisionedSpaceGB}},@{N="Cluster";E={Get-Cluster -VM $_.Vm.Name}},@{N="vCenter";E={$VC}},FullformattedMessage } $Report1 | Out-GridView     
My original ask was "What document(s) describes the contents of the OVF descriptor file (.ovf)?". What are the best sources for this information?  Thanks.
Add argument "--skipverification" at the end of the command. --skipverification = It skips verifying server certificate when connecting to vc. Eg: > python3 ./samples/vsphere/vcenter/vm/list_v... See more...
Add argument "--skipverification" at the end of the command. --skipverification = It skips verifying server certificate when connecting to vc. Eg: > python3 ./samples/vsphere/vcenter/vm/list_vms.py -s x.x.x.x -u Administrator@vsphere.local -p xxxxx --skipverification
As your post probably sits best in the {code} section of the Communities where there are dedicated areas for SDKs, I have reported it to the volunteer moderators.  
As the current vddk8.0 version does not support Perl vsphere automation sdk, Is it require vddk to be installed on same system for  vsphere-automation-sdk-python. I am new to vmware, plz correct me... See more...
As the current vddk8.0 version does not support Perl vsphere automation sdk, Is it require vddk to be installed on same system for  vsphere-automation-sdk-python. I am new to vmware, plz correct me if my understading wrong.   facing following error: [root@vsphere-automation-sdk-python-master]# python3 ./samples/vsphere/vcenter/vm/list_vms.py -s x.x.x.x -u root -p xxxxx vcenter server = x.x.x.x vc username = root Traceback (most recent call last): File "/usr/local/lib/python3.6/site-packages/urllib3/contrib/pyopenssl.py", line 456, in wrap_socket cnx.do_handshake() File "/usr/local/lib/python3.6/site-packages/OpenSSL/SSL.py", line 1934, in do_handshake self._raise_ssl_error(self._ssl, result) File "/usr/local/lib/python3.6/site-packages/OpenSSL/SSL.py", line 1671, in _raise_ssl_error _raise_current_error() File "/usr/local/lib/python3.6/site-packages/OpenSSL/_util.py", line 54, in exception_from_error_queue raise exception_type(errors) OpenSSL.SSL.Error: [('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')] During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/local/lib/python3.6/site-packages/urllib3/connectionpool.py", line 600, in urlopen chunked=chunked) File "/usr/local/lib/python3.6/site-packages/urllib3/connectionpool.py", line 343, in _make_request self._validate_conn(conn) File "/usr/local/lib/python3.6/site-packages/urllib3/connectionpool.py", line 839, in _validate_conn conn.connect() File "/usr/local/lib/python3.6/site-packages/urllib3/connection.py", line 344, in connect ssl_context=context) File "/usr/local/lib/python3.6/site-packages/urllib3/util/ssl_.py", line 358, in ssl_wrap_socket return context.wrap_socket(sock) File "/usr/local/lib/python3.6/site-packages/urllib3/contrib/pyopenssl.py", line 462, in wrap_socket raise ssl.SSLError('bad handshake: %r' % e) ssl.SSLError: ("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')],)",) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/local/lib/python3.6/site-packages/requests/adapters.py", line 449, in send timeout=timeout File "/usr/local/lib/python3.6/site-packages/urllib3/connectionpool.py", line 638, in urlopen _stacktrace=sys.exc_info()[2]) File "/usr/local/lib/python3.6/site-packages/urllib3/util/retry.py", line 399, in increment raise MaxRetryError(_pool, url, error or ResponseError(cause)) urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='x.x.x.x', port=443): Max retries exceeded with url: /api (Caused by SSLError(SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')],)",),)) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "./samples/vsphere/vcenter/vm/list_vms.py", line 62, in <module> main() File "./samples/vsphere/vcenter/vm/list_vms.py", line 57, in main list_vm = ListVM() File "./samples/vsphere/vcenter/vm/list_vms.py", line 42, in __init__ session=session) File "/usr/local/lib/python3.6/site-packages/vmware/vapi/vsphere/client.py", line 175, in create_vsphere_client hok_token=hok_token, private_key=private_key) File "/usr/local/lib/python3.6/site-packages/vmware/vapi/vsphere/client.py", line 116, in __init__ session_id = session_svc.create() File "/usr/local/lib/python3.6/site-packages/com/vmware/cis_client.py", line 201, in create return self._invoke('create', None) File "/usr/local/lib/python3.6/site-packages/vmware/vapi/bindings/stub.py", line 345, in _invoke return self._api_interface.native_invoke(ctx, _method_name, kwargs) File "/usr/local/lib/python3.6/site-packages/vmware/vapi/bindings/stub.py", line 266, in native_invoke method_result = self.invoke(ctx, method_id, data_val) File "/usr/local/lib/python3.6/site-packages/vmware/vapi/bindings/stub.py", line 202, in invoke ctx) File "/usr/local/lib/python3.6/site-packages/vmware/vapi/security/client/security_context_filter.py", line 102, in invoke self, service_id, operation_id, input_value, ctx) File "/usr/local/lib/python3.6/site-packages/vmware/vapi/provider/filter.py", line 76, in invoke service_id, operation_id, input_value, ctx) File "/usr/local/lib/python3.6/site-packages/vmware/vapi/protocol/client/msg/json_connector.py", line 79, in invoke response = self._do_request(VAPI_INVOKE, ctx, params) File "/usr/local/lib/python3.6/site-packages/vmware/vapi/protocol/client/msg/json_connector.py", line 122, in _do_request headers=request_headers, body=request_body)) File "/usr/local/lib/python3.6/site-packages/vmware/vapi/protocol/client/rpc/requests_provider.py", line 98, in do_request cookies=http_request.cookies, timeout=timeout) File "/usr/local/lib/python3.6/site-packages/requests/sessions.py", line 533, in request resp = self.send(prep, **send_kwargs) File "/usr/local/lib/python3.6/site-packages/requests/sessions.py", line 646, in send r = adapter.send(request, **kwargs) File "/usr/local/lib/python3.6/site-packages/requests/adapters.py", line 514, in send raise SSLError(e, request=request) requests.exceptions.SSLError: HTTPSConnectionPool(host='x.x.x.x', port=443): Max retries exceeded with url: /api (Caused by SSLError(SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')],)",),))   plz help me on this.