• R/O
  • SSH

pm_crmgen: Commit

※リポジトリは、https://github.com/linux-ha-japan/pm_crmgen-1.0 へ移行しました。

Pacemaker 1.0 設定編集ツール

Heartbeat-2.1.4 用 hb-cibgen(*) の Pacemaker対応版。
(*) http://sourceforge.jp/projects/linux-ha/releases/?package_id=10290


Commit MetaInfo

Revision1a2323558547f09edf72d96bcfd2f060939109f5 (tree)
Time2011-09-28 14:28:01
AuthorKazunori INOUE <inouekazu@inte...>
CommiterKazunori INOUE

Log Message

Support 'id_spec' through the 'location' command

Change Summary

Incremental Difference

diff -r db984fa29015 -r 1a2323558547 pm_crmgen.py
--- a/pm_crmgen.py Wed Sep 28 14:27:40 2011 +0900
+++ b/pm_crmgen.py Wed Sep 28 14:28:01 2011 +0900
@@ -88,7 +88,7 @@
8888 }
8989 # 非必須列名
9090 CLM_NODE = ['ntype']
91-CLM_LOCEXPERT = ['role']
91+CLM_LOCEXPERT = ['role','id_spec']
9292 CLM_COLOCATION = ['rsc-role','with-rsc-role']
9393 CLM_ORDER = ['first-action','then-action','symmetrical']
9494
@@ -964,12 +964,25 @@
964964 False : NG(フォーマット・エラー)
965965 '''
966966 def csv2xml_locexpert(self,clmd,csvl):
967- def set_attr(node,names):
967+ def has_idspec(tgtref):
968+ if 'id_spec' in clmd:
969+ x = csvl[clmd['id_spec']]
970+ if not tgtref:
971+ return x != ''
972+ return x and x.startswith('$id-ref=') or x.startswith('id-ref=')
973+ return False
974+ def set_attr(node,names,tag=None,setflg=False):
975+ if tag: e = None
976+ else: e = node
968977 for k,x in [(k,x) for (k,x) in clmd.items() if k in names and csvl[x]]:
969- node.setAttribute(k,csvl[x])
970- node.setAttribute(self.ATTR_CREATED,str(self.lineno))
978+ if not e:
979+ e = self.xml_create_child(node,tag)
980+ e.setAttribute(k,csvl[x])
981+ setflg = True
982+ if setflg:
983+ e.setAttribute(self.ATTR_CREATED,str(self.lineno))
971984 global errflg2; errflg2 = False
972- changed = False
985+ changed = False; r = None
973986 rsc = csvl[clmd['rsc']]
974987 if rsc:
975988 self.attrd['rsc'] = rsc; changed = True
@@ -978,31 +991,36 @@
978991 if not rsc:
979992 log.fmterr_l(u"'rsc'列に値が設定されていません。")
980993 self.xml_get_rscnode(rsc)
981- x = self.score_validate(csvl[clmd['score']])
982- if x:
983- csvl[clmd['score']] = self.attrd['score'] = x
994+ if (has_idspec(True) and
995+ not [k for (k,x) in clmd.items() if k not in ['rsc','id_spec'] and csvl[x]]):
984996 r = self.doc.createElement('rule')
985- else:
986- if changed or not rsc:
987- log.fmterr_l(u"'score'列に値が設定されていません。")
997+ if not r:
998+ x = self.score_validate(csvl[clmd['score']])
999+ if x:
1000+ csvl[clmd['score']] = self.attrd['score'] = x
1001+ r = self.doc.createElement('rule')
9881002 else:
989- if csvl[clmd['bool_op']]:
990- log.warn_l(u"'bool_op'列に値が設定されています。")
991- if 'role' in clmd and csvl[clmd['role']]:
992- log.warn_l(u"'role'列に値が設定されています。")
993- csvl[clmd['score']] = self.attrd['score']
994- r = None
995- if not csvl[clmd['attribute']]:
996- log.fmterr_l(u"'attribute'列に値が設定されていません。")
997- if not csvl[clmd['op']]:
998- log.fmterr_l(u"'op'列に値が設定されていません。")
999- else:
1000- if csvl[clmd['op']].lower() in UNARY_OP:
1001- if csvl[clmd['value']]:
1002- log.warn_l(u"'value'列に値が設定されています。")
1003+ if changed or not rsc:
1004+ log.fmterr_l(u"'score'列に値が設定されていません。")
1005+ else:
1006+ if csvl[clmd['bool_op']]:
1007+ log.warn_l(u"'bool_op'列に値が設定されています。")
1008+ if 'role' in clmd and csvl[clmd['role']]:
1009+ log.warn_l(u"'role'列に値が設定されています。")
1010+ if has_idspec(False):
1011+ log.warn_l(u"'id_spec'列に値が設定されています。")
1012+ csvl[clmd['score']] = self.attrd['score']
1013+ if not csvl[clmd['attribute']]:
1014+ log.fmterr_l(u"'attribute'列に値が設定されていません。")
1015+ if not csvl[clmd['op']]:
1016+ log.fmterr_l(u"'op'列に値が設定されていません。")
10031017 else:
1004- if not csvl[clmd['value']]:
1005- log.fmterr_l(u"'value'列に値が設定されていません。")
1018+ if csvl[clmd['op']].lower() in UNARY_OP:
1019+ if csvl[clmd['value']]:
1020+ log.warn_l(u"'value'列に値が設定されています。")
1021+ else:
1022+ if not csvl[clmd['value']]:
1023+ log.fmterr_l(u"'value'列に値が設定されていません。")
10061024 if errflg2:
10071025 return False
10081026 #
@@ -1010,7 +1028,7 @@
10101028 # <crm>
10111029 # <locexperts>
10121030 # <locexpert rsc="grpPg">
1013- # <rule score="200">
1031+ # <rule score="200" id_spec="$id=&quot;r1&quot;">
10141032 # <exp attribute="#uname" op="eq" value="pm01"/>
10151033 # </rule>
10161034 # :
@@ -1024,6 +1042,9 @@
10241042 # <exp attribute="attr1" op="ne" value="val2"/>
10251043 # </rule>
10261044 # </locexpert>
1045+ # <locexpert rsc="grpPg2">
1046+ # <rule id_spec="$id-ref=&quot;r1&quot;"/>
1047+ # :
10271048 #
10281049 x = self.xml_get_node(self.root,'locexperts')
10291050 l = self.xml_get_nodes(x,'locexpert','rsc',rsc)
@@ -1038,14 +1059,14 @@
10381059 if x:
10391060 x[0].removeAttribute(self.ATTR_STATE)
10401061 r.setAttribute(self.ATTR_STATE,'working')
1041- set_attr(r,['score','bool_op','role'])
1062+ set_attr(r,['score','bool_op','role','id_spec'])
10421063 l.appendChild(r)
10431064 x = self.xml_get_nodes(l,'rule',self.ATTR_STATE,'working')[0]
10441065 if x.getElementsByTagName('exp') and not x.getAttribute('bool_op'):
10451066 log.fmterr_l(u"'bool_op'列に値が設定されていません。(%s行目)"
10461067 %x.getAttribute(self.ATTR_CREATED))
10471068 return False
1048- set_attr(self.xml_create_child(x,'exp'),['attribute','op','value'])
1069+ set_attr(x,['attribute','op','value'],'exp')
10491070 return True
10501071
10511072 '''
@@ -1500,10 +1521,13 @@
15001521 r = l.getAttribute('rsc')
15011522 s.append('location rsc_location-%s-%d %s'%(r,seq+i+1,r))
15021523 for x in l.getElementsByTagName('rule'):
1503- s.append(' \\\n\trule ')
1524+ s.append(' \\\n\trule')
1525+ if x.getAttribute('id_spec'):
1526+ s.append(' %s'%x.getAttribute('id_spec'))
15041527 if x.getAttribute('role'):
1505- s.append('$role="%s" '%x.getAttribute('role'))
1506- s.append('%s: '%x.getAttribute('score'))
1528+ s.append(' $role="%s"'%x.getAttribute('role'))
1529+ if x.getAttribute('score'):
1530+ s.append(' %s: '%x.getAttribute('score'))
15071531 z = []
15081532 for y in x.getElementsByTagName('exp'):
15091533 o = y.getAttribute('op')
diff -r db984fa29015 -r 1a2323558547 pm_crmgen_env.xls
Binary file pm_crmgen_env.xls has changed
Show on old repository browser