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
|
# pylint: disable=unused-argument
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF 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.
from charms.reactive import when_any, when_none, is_state
from charmhelpers.core.hookenv import status_set
@when_none('namenode.spec.mismatch', 'resourcemanager.spec.mismatch')
@when_any(
'bigtop.available',
'apache-bigtop-datanode.pending',
'apache-bigtop-nodemanager.pending',
'apache-bigtop-datanode.installed',
'apache-bigtop-nodemanager.installed',
'apache-bigtop-datanode.started',
'apache-bigtop-nodemanager.started',
'namenode.joined',
'namenode.ready',
'resourcemanager.joined',
'resourcemanager.ready',
)
def update_status():
hdfs_rel = is_state('namenode.joined')
yarn_rel = is_state('resourcemanager.joined')
hdfs_ready = is_state('namenode.ready')
yarn_ready = is_state('resourcemanager.ready')
if not (hdfs_rel or yarn_rel):
status_set('blocked',
'missing required namenode and/or resourcemanager relation')
elif hdfs_rel and not hdfs_ready:
status_set('waiting', 'waiting for hdfs to become ready')
elif yarn_rel and not yarn_ready:
status_set('waiting', 'waiting for yarn to become ready')
else:
ready = []
if hdfs_ready:
ready.append('datanode')
if yarn_ready:
ready.append('nodemanager')
status_set('active', 'ready ({})'.format(' & '.join(ready)))
|