Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

#!/usr/bin/env python 

# Licensed to Cloudera, Inc. under one 

# or more contributor license agreements. See the NOTICE file 

# distributed with this work for additional information 

# regarding copyright ownership. Cloudera, Inc. licenses this file 

# to you under the Apache License, Version 2.0 (the 

# "License"); you may not use this file except in compliance 

# with the License. You may obtain a copy of the License at 

# 

# http://www.apache.org/licenses/LICENSE-2.0 

# 

# Unless required by applicable law or agreed to in writing, software 

# distributed under the License is distributed on an "AS IS" BASIS, 

# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 

# See the License for the specific language governing permissions and 

# limitations under the License. 

# 

 

import re 

import socket 

import airflow.configuration as conf 

 

# Pattern to replace with hostname 

HOSTNAME_PATTERN = '_HOST' 

 

 

def get_kerberos_principal(principal, host): 

components = get_components(principal) 

if not components or len(components) != 3 or components[1] != HOSTNAME_PATTERN: 

return principal 

else: 

if not host: 

raise IOError("Can't replace %s pattern since host is null." % HOSTNAME_PATTERN) 

return replace_hostname_pattern(components, host) 

 

 

def get_components(principal): 

""" 

get_components(principal) -> (short name, instance (FQDN), realm) 

 

``principal`` is the kerberos principal to parse. 

""" 

if not principal: 

return None 

return re.split('[\/@]', str(principal)) 

 

 

def replace_hostname_pattern(components, host=None): 

fqdn = host 

if not fqdn or fqdn == '0.0.0.0': 

fqdn = get_localhost_name() 

return '%s/%s@%s' % (components[0], fqdn.lower(), components[2]) 

 

 

def get_localhost_name(): 

return socket.getfqdn() 

 

 

def get_fqdn(hostname_or_ip=None): 

# Get hostname 

try: 

if hostname_or_ip: 

fqdn = socket.gethostbyaddr(hostname_or_ip)[0] 

else: 

fqdn = get_localhost_name() 

except IOError: 

fqdn = hostname_or_ip 

 

if fqdn == 'localhost': 

fqdn = get_localhost_name() 

 

return fqdn 

 

def principal_from_username(username): 

realm = conf.get("security", "default_realm") 

if '@' not in username and realm: 

username = "{}@{}".format(username, realm) 

 

return username