小程序页面之间进行传值的操作办法
732
2022-10-05
ansible--inventory模块之expand_hosts .py 源码分析
expand_hosts.py中包含两个函数;
detect_range()和expand_hostname_range()
主要目的是处理hosts配置文件中主机名字段
'''主要目的是处理hosts配置文件中主机名字段hosts配置例子: cat hosts [clusters] sp-[1:3] sp-[a:e] [others] sp-[01:03] [test:children] clusters others'''import stringfrom ansible import errorsdef detect_range(line = None): ''' 按行读取hosts文件,并且获取主机行 例子: sp-[1:3]、sp-[a:g]、sp-[05:10] ''' if (not line.startswith("[") and # 不是以[开头,排除组名行[组名] line.find("[") != -1 and # 字符串.find('值') 返回查找值的索引,不等于-1表示匹配到该值 line.find(":") != -1 and line.find("]") != -1 and line.index("[") < line.index(":") < line.index("]")): # index()获取索引,这里的意思是sp-[1:3],三个符号形成这样的组合 return True else: return Falsedef expand_hostname_range(line = None): all_hosts = [] # 主机列表 if line: # 将line(sp-[1:3])"["和"]"替换成"|",再根据"|"切割; or sp-[01:03] # (head, nrange, tail) ==> ('sp-', '1:3', '') or ('sp-', '01:03', '') (head, nrange, tail) = line.replace('[','|').replace(']','|').split('|') # bounds ==> (1,3) or (01,03) bounds = nrange.split(":") if len(bounds) != 2: # ansible不支持步长,[:]里只能两个值 raise errors.AnsibleError("host range incorrectly specified") beg = bounds[0] # 起始 ==> 1 or 01 end = bounds[1] # 结束 ==> 3 or 03 if not beg: # 起始默认值为 0 beg = "0" if not end: # 结束端没有,则抛出异常 raise errors.AnsibleError("host range end value missing") if beg[0] == '0' and len(beg) > 1: # 判断是否是0填充模式,比如[01:03],beg ==> 01 以0开头,且长度大于1 rlen = len(beg) # range length formatting hint # rlen ==>beg的长度,01,长度则是2, 001,则是3 if rlen != len(end): # beg和end的长度要一致,(001, 010),否则抛出异常 raise errors.AnsibleError("host range format incorrectly specified!") ''' zfill(rlen) 字符串不足rlen长度的,以0填充 lambda函数中的'_',表示传入参数 str转换为字符串格式 fill保存lambda函数,提供给下文调用 ''' fill = lambda _: str(_).zfill(rlen) # range sequence else: ''' 否则将str类型赋值给fill >>> fill = str >>> fill
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~