1inherit obmc-phosphor-utils
2DISCOVERY_SVC_PACKAGES ?= "${PN}"
3
4python() {
5    avahi_enabled = bb.utils.contains(
6            'DISTRO_FEATURES', 'avahi', True, False, d)
7    slp_enabled = bb.utils.contains(
8            'DISTRO_FEATURES', 'slp', True, False, d)
9
10
11    if not avahi_enabled and not slp_enabled:
12        return
13
14    syscnfdir = d.getVar('sysconfdir', True)
15    dest_dir = d.getVar('D', True)
16
17    set_append(d, 'AVAHI_SERVICES_DIR', os.path.join(
18        dest_dir+syscnfdir,
19        'avahi',
20        'services'))
21    set_append(d, 'SLP_SERVICES_DIR', os.path.join(
22        dest_dir+syscnfdir,
23        'slp',
24        'services'))
25
26
27    for pkg in listvar_to_list(d, 'DISCOVERY_SVC_PACKAGES'):
28        for service in listvar_to_list(d, 'REGISTERED_SERVICES_%s' % pkg):
29            if avahi_enabled:
30                set_append(d, 'RRECOMMENDS_%s' % pkg, 'avahi-daemon')
31                svc_name, svc_type, svc_port = service.split(':')
32                set_append(d, 'FILES_%s' % pkg, os.path.join(
33                    syscnfdir,
34                    'avahi',
35                    'services',
36                    '%s.service' % svc_name))
37
38            if slp_enabled:
39                set_append(d, 'RRECOMMENDS_%s' % pkg, 'slpd-lite')
40                svc_name, svc_type, svc_port = service.split(':')
41                set_append(d, 'FILES_%s' % pkg, os.path.join(
42                    syscnfdir,
43                    'slp',
44                    'services',
45                    '%s.service' % svc_name))
46
47}
48
49python discovery_services_postinstall() {
50    avahi_enabled = bb.utils.contains(
51            'DISTRO_FEATURES', 'avahi', True, False, d)
52    slp_enabled = bb.utils.contains(
53            'DISTRO_FEATURES', 'slp', True, False, d)
54
55    if not avahi_enabled and not slp_enabled:
56        return
57
58    avahi_service_dir = d.getVar('AVAHI_SERVICES_DIR', True).strip()
59    slp_service_dir = d.getVar('SLP_SERVICES_DIR', True).strip()
60
61    if not os.path.exists(avahi_service_dir):
62        os.makedirs(avahi_service_dir)
63
64    if not os.path.exists(slp_service_dir):
65        os.makedirs(slp_service_dir)
66
67    def register_service_avahi(d, service_name, service_type, service_port):
68        service_file = os.path.join(
69            avahi_service_dir,
70            '%s.service' % service_name)
71        with open(service_file, 'w') as fd:
72            fd.write('<?xml version="1.0" ?>\n')
73            fd.write('<!DOCTYPE service-group SYSTEM "avahi-service.dtd">\n')
74            fd.write('<service-group>\n')
75            fd.write('        <name>%s</name>\n' % service_name)
76            fd.write('        <service>\n')
77            fd.write('                <type>%s</type>\n' % service_type)
78            fd.write('                <port>%s</port>\n' % service_port)
79            fd.write('        </service>\n')
80            fd.write('</service-group>\n')
81
82
83    def register_service_slp(d, service_name, service_type, service_port):
84        service_file = os.path.join(
85            slp_service_dir,
86            '%s.service' % service_name)
87        with open(service_file, 'w') as fd:
88            fd.write('%s %s %s' % (service_name, service_type, service_port))
89
90    def register_services(d,pkg):
91        for service in listvar_to_list(d, 'REGISTERED_SERVICES_%s' % pkg):
92            svc_info = service.split(":")
93            try:
94                svc_name, svc_type, svc_port = svc_info
95            except:
96                continue
97            if avahi_enabled:
98                avahi_svc_type = "_" + svc_name + "._" + svc_type
99                register_service_avahi(d, svc_name, avahi_svc_type, svc_port)
100            if slp_enabled:
101                register_service_slp(d, svc_name, svc_type, svc_port)
102
103    for pkg in listvar_to_list(d, 'DISCOVERY_SVC_PACKAGES'):
104        register_services(d, pkg)
105
106}
107do_install[postfuncs] += "discovery_services_postinstall"
108