Initial AD support for BDCs (#6741)

Partially working AD support for BDCs with some known issues
- Plumbed through kerberos support to Notebooks.
  - Using "gateway-0" for service temporarily as service endpoints API doesn't yet return correct DNS name. Will update in separate PR once available
- Plumbed kerberos auth to HDFS, Spark. Only partially working as we use same token on each call 
  - Will fix in separate PR, as this requires a refactor of WebHDFS library. Will need to either get new token every time or set a cookie, both of which require refactors
- Fixed error when Data Service node expansion failed and blocked all OE expansion
- Support for SqlToolsService change to use new cluster endpoints DMV
  -  Updated API to add new endpoints field to replace IP + port
  - Added logic to handle case where endpoints for Yarn, Grafana etc. are in the list
  - Sort list and use expected new localized strings

- Updated SqlToolsService to include support for new DMV
- Add "gateway-0" handling in Jupyter session as workaround for lack of domain names in endpoints list
This commit is contained in:
Kevin Cunnane
2019-08-14 18:09:41 -07:00
committed by GitHub
parent 4e8c06f36d
commit 52f8984a99
31 changed files with 639 additions and 189 deletions

View File

@@ -124,6 +124,8 @@ export interface TopLevelChildrenPath {
providerObject: azdata.ObjectExplorerNodeProvider | azdata.ObjectExplorerProvider;
}
const errSessionCreateFailed = nls.localize('OeSessionFailedError', "Failed to create Object Explorer session");
export class ObjectExplorerService implements IObjectExplorerService {
public _serviceBrand: any;
@@ -231,19 +233,18 @@ export class ObjectExplorerService implements IObjectExplorerService {
if (session && session.success) {
this.handleSessionCreated(session);
} else {
let errorMessage = session && session.errorMessage ? session.errorMessage :
nls.localize('OeSessionFailedError', "Failed to create Object Explorer session");
let errorMessage = session && session.errorMessage ? session.errorMessage : errSessionCreateFailed;
this.logService.error(errorMessage);
}
}
private async handleSessionCreated(session: azdata.ObjectExplorerSession): Promise<void> {
try {
let connection: ConnectionProfile = undefined;
let errorMessage: string = undefined;
if (this._sessions[session.sessionId]) {
connection = this._sessions[session.sessionId].connection;
let connection: ConnectionProfile = undefined;
let errorMessage: string = undefined;
if (this._sessions[session.sessionId]) {
connection = this._sessions[session.sessionId].connection;
try {
if (session.success && session.rootNode) {
let server = this.toTreeNode(session.rootNode, null);
server.connection = connection;
@@ -251,8 +252,7 @@ export class ObjectExplorerService implements IObjectExplorerService {
this._activeObjectExplorerNodes[connection.id] = server;
}
else {
errorMessage = session && session.errorMessage ? session.errorMessage :
nls.localize('OeSessionFailedError', "Failed to create Object Explorer session");
errorMessage = session && session.errorMessage ? session.errorMessage : errSessionCreateFailed;
this.logService.error(errorMessage);
}
// Send on session created about the session to all node providers so they can prepare for node expansion
@@ -261,14 +261,14 @@ export class ObjectExplorerService implements IObjectExplorerService {
let promises: Thenable<boolean>[] = nodeProviders.map(p => p.handleSessionOpen(session));
await Promise.all(promises);
}
} catch (error) {
this.logService.warn(`cannot handle the session ${session.sessionId} in all nodeProviders`);
} finally {
this.sendUpdateNodeEvent(connection, errorMessage);
}
else {
this.logService.warn(`cannot find session ${session.sessionId}`);
}
this.sendUpdateNodeEvent(connection, errorMessage);
} catch (error) {
this.logService.warn(`cannot handle the session ${session.sessionId} in all nodeProviders`);
}
else {
this.logService.warn(`cannot find session ${session.sessionId}`);
}
}