Ansible:在Ansible广告空间中使用主机范围时,如何获取当前的“主机索引”?

时间:2020-04-16 13:58:44

标签: ansible

给出一个inventory.yml,它以特定的主机范围为目标

my_role:
  hosts:
   computer-[1:50].com:
     my_role_variable: true

假设我想设置一个依赖于主机范围的“当前迭代器”的变量my_role_variable_2,例如computer-42.com特别应该获得变量COMPUTER_42,如下所示: :

my_role:
  hosts:
   computer-[1:50].com:
     my_role_variable: true
     my_role_variable_2: "COMPUTER_{{ ?? index ?? }}"

假设存在特殊变量inventory_hostname,我想我可以使用类似regex_search的东西:

my_role:
  hosts:
   computer-[1:50].com:
     my_role_variable: true
     my_role_variable_2: "COMPUTER_{{ inventory_hostname | regex_search('computer-(\d+).com') }}"

但是肯定有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

过滤器“ regex_replace”应该可以完成工作

class Trains():
    trains_seats = {'Blue_Line': 20, 'Orange_Line': 30}
    def __init__(self,train,num_of_tickets):
        self.train = train
        self.num_of_tickets = num_of_tickets

    def book_seats(self):
        if self.train in Trains.trains_seats and Trains.trains_seats[self.train] >= self.num_of_tickets:
            Trains.trains_seats[self.train] = Trains.trains_seats[self.train] - self.num_of_tickets
            return Trains.trains_seats
        else:
            return 'Not enough seats or Wrong Train'

    def return_available_seats(self):
        return Trains.trains_seats


class Passenger(Trains):
    def __init__(self,first,last,train,num_of_tickets):
        super().__init__(train,num_of_tickets)
        self.first = first
        self.last = last

下一个选项是“ split()”

var2: "COMPUTER_{{ inventory_hostname|regex_replace('computer-(\\d+).com', '\\1') }}"
相关问题