小编alf*_*ito的帖子

在group_vars /中定义的Ansible变量未找到

假设Ansible结构:

.
??? group_vars
?   ??? all
??? site.yml
Run Code Online (Sandbox Code Playgroud)

其中all包括my_test_variable: yes,和site.yml是:

- hosts: all

  tasks:
    - name: Variable test
      debug: msg={{ my_test_variable }}
Run Code Online (Sandbox Code Playgroud)

我正在使用Vagrant在本地运行它,所以命令看起来像:

$ ansible-playbook site.yml -i /path-to-vagrant/.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory --private-key=/path-to-vagrant/.vagrant/machines/default/virtualbox/private_key -u vagrant

Vagrant生成的反转文件:

# Generated by Vagrant

default ansible_ssh_host=127.0.0.1 ansible_ssh_port=2222
Run Code Online (Sandbox Code Playgroud)

并输出:

PLAY: ***************************************************************************

TASK [setup] ********************************************************************
ok: [default]

TASK [Variable test] ************************************************************
fatal: [default]: FAILED! => {"msg": "ERROR! the field 'args' has an invalid value, which appears to include a variable that is undefined. …
Run Code Online (Sandbox Code Playgroud)

vagrant ansible ansible-playbook

11
推荐指数
2
解决办法
1万
查看次数

正则表达式匹配OR中较长的字符串

动机

我正在解析地址并需要在分开的匹配中获取地址和国家/地区,但这些国家/地区可能有别名,例如:

UK == United Kingdom, 
US == USA == United States,
Korea == South Korea, 
Run Code Online (Sandbox Code Playgroud)

等等...

说明

所以,我所做的是创建一个大的正则表达式,其中所有可能的国家名称(至少是更可能出现的国家名称)由OR运算符分隔,如下所示:

germany|us|france|chile
Run Code Online (Sandbox Code Playgroud)

但问题在于多字国家名称及其较短版本,例如:

Republic of MoldovaMoldova

以此为例,我们有字符串:

'Somewhere in Moldova, bla bla, 12313, Republic of Moldova'
Run Code Online (Sandbox Code Playgroud)

我想从中得到什么:

'Somewhere in Moldova, bla bla, more bla, 12313'
'Republic of Moldova'
Run Code Online (Sandbox Code Playgroud)

但这就是我得到的:

'Somewhere in Moldova, bla bla, 12313, Republic of'
'Moldova'
Run Code Online (Sandbox Code Playgroud)

正则表达式

由于有几种情况,这是我到目前为止使用的:

^(.*),? \(?(republic of moldova|moldova)\)?(.*[\d\-]+.*|,.*[:/].*)?$
Run Code Online (Sandbox Code Playgroud)

因为我们可能有国家名称后的传真,电话,邮政编码或其他东西 - 我不关心 - 我使用最后一个匹配组删除它们:

(.*[\d\-]+.*|,.*[:/].*)?
Run Code Online (Sandbox Code Playgroud)

此外,有时国家名称括在括号中,所以我\(?\)?第二个匹配组一起,并且所有国家都在其中:

(republic of moldova|moldova|...)
Run Code Online (Sandbox Code Playgroud)

问题是,当有一个条目是较大的条目的子集时,较短的条目选择较长的条目,其余的条目保留在base_address字符串中.有没有办法告诉正则表达式选择两个值马赫时最大可能的匹配? …

python regex

10
推荐指数
1
解决办法
1264
查看次数

Django模型子类化方法

我设计一个新的Django应用程序,并且由于几种可能性,我不知道这将是最好的,所以我想的意见,并希望提高我走到这一步.

这个问题很接近,但并不完全.这个涉及平坦/嵌套的主题是有帮助的,但仍然没有回答问题.关于同一主题还有很多其他人,但没有人告诉我我想知道什么.

背景

模型具有一些共享属性的独特属性,我需要在另一个模型中引用它们,最好使用单个入口点,而不是为每个可能的模型都有一个字段.

我希望能够执行涉及Base类的复杂Django ORM查询,并在需要时按SubClass进行过滤.例如Event.objects.all(),返回所有事件.我知道Django模型utils继承管理器,并打算尽可能使用它.

此外,我将使用django admin来创建和管理对象,因此必须轻松集成.我希望能够直接创建一个新的SubEvent,而无需先创建一个Event实例.

为了说明,假设我有以下适用于app的模型A.

class Event(models.Model):
    commom_field = models.BooleanField()

    class Meta:
        abstract = True

class SubEventA(Event):
    email = models.EmailField(unique=True)

class SubEventB(Event):
    title = models.TextField()

class SubEventC(Event):
    number = models.IntegerField(default=10)

# and so on
Run Code Online (Sandbox Code Playgroud)

还有一个应用程序B,我希望能够引用任何类型的事件,例如:

class OtherModel(models.Model):
    event = models.ForeignKey('A.Event')

# This won't work, because `A.Event` is abstract.
Run Code Online (Sandbox Code Playgroud)

可能的解决方案

  1. 使用GenericForeignKey.

    # B.models.py
    class OtherModel(models.Model):
        content_type = models.ForeignKey(ContentType)
        object_id = models.PositiveIntegerField()
        event = …
    Run Code Online (Sandbox Code Playgroud)

python django orm django-models

8
推荐指数
1
解决办法
4427
查看次数