vsphere-cloud-plugin icon indicating copy to clipboard operation
vsphere-cloud-plugin copied to clipboard

Add option to select http client

Open lifemanship opened this issue 2 years ago • 0 comments

The plugin depends on network library yavijava https://github.com/jenkinsci/vsphere-cloud-plugin/blob/master/pom.xml#L95-L96 The yavijava supports two types of http clients: CloseableHttpClient HttpURLConnection - is default

The HttpURLConnection client's behaviour can be impacted by system-wide cookie handler CookieManager: https://docs.oracle.com/javase/8/docs/api/java/net/CookieManager.html The major problem is that the CookieManager overlaps logic provided by HttpURLConnection to setup http header Cookie. Global CookieManager know nothing about logic of vsphere-cloud-plugin and fill all http headers with stored cookies, as result vsphere center rejects login requests with error:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
	<soapenv:Body>
		<soapenv:Fault>
			<faultcode>ServerFaultCode</faultcode>
			<faultstring>Cannot complete login due to an incorrect user name or password.</faultstring>
			<detail>
				<InvalidLoginFault xmlns="urn:vim25" xsi:type="InvalidLogin">
					<faultMessage>
						<key>vim.fault.InvalidLoginWithReason</key>
						<arg>
							<key>1</key>
							<value xsi:type="xsd:string">vim.fault.InvalidLoginReasonRegisterFailed</value>
						</arg>
						<message>Login failed because the session could not be re-registered.</message>
					</faultMessage>
				</InvalidLoginFault>
			</detail>
		</soapenv:Fault>
	</soapenv:Body>
</soapenv:Envelope>

The vsphere-cloud-plugin does not use CookieManager, but there is no guarantee that other plugins avoid it. Example: https://github.com/jenkinsci/parameterized-remote-trigger-plugin/blob/master/src/main/java/org/jenkinsci/plugins/ParameterizedRemoteTrigger/RemoteBuildConfiguration.java#L158-L159

As workaroud we can switch to CloseableHttpClient http client. Issue in Jira: https://issues.jenkins.io/browse/JENKINS-69999

  • [x] Make sure you are opening from a topic/feature/bugfix branch (right side) and not your main branch!
  • [x] Ensure that the pull request title represents the desired changelog entry
  • [x] Please describe what you did
  • [x] Link to relevant issues in GitHub or Jira
  • [x] Link to relevant pull requests, esp. upstream and downstream changes
  • [ ] Ensure you have provided tests - that demonstrates feature works or fixes the issue

lifemanship avatar Nov 02 '22 20:11 lifemanship