试图以正则表达式替换正则表达式,以进行自动缩放。 在我的CFT中,我具有以下映射:
DevRegionSettings:
us-east-1:
primaryZone: us-east-1a
# secondaryZone: us-east-1b
# autoscale is wrong at point of instantiation
amiAutoscale: ami-234sefsrwerwer21
amiDB: ami-12313123
amiCoord: ami-12312312
amiWeb: ami-13123123
amiWorker: ami-12312312
我只想用在角色中较早发现的最新ami替换amiAutoscale
的值。
我是一个正则表达式菜鸟,无法一生解决这个问题。 在这个线程中正在使用一些正则表达式: Regex to match key in YAML
但是仍然不能让它做我想做的事:(
任何帮助将不胜感激!
我运行的ansible任务如下:
- name: Replacing ami in the Dev Cloudformation Template
replace:
regexp: '(^\s*(?P<key>\w+_amiAutoscale):\s*(?P<value>\d+))'
replace: "{{ latest_ami.image_id }}"
path: "$path_to_cft.yaml"
答案 0 :(得分:0)
正则表达式有几个问题:
# File: app/_config/content.yml
MyPage:
extensions:
- RemoveContentExtension
-第\w+_amiAutoscale
行在amiAutoscale之前没有amiAutoscale: ami-234sefsrwerwer21
_
-(?P<value>\d+)
不是数字序列。这对我有用,但是可能过于开放:ami-234sefsrwerwer21
答案 1 :(得分:0)
- name: Replacing ami in the Dev Cloudformation Template
replace:
regexp: '(^\s*(?P<key>amiAutoscale):\s*(?P<value>.+))'
replace: "{{ latest_ami.image_id }}"
path: "$path_to_cft.yaml"
答案 2 :(得分:0)
您的正则表达式不匹配,因为正则表达式期望匹配1+个单词字符,然后紧跟数据中不存在的起始空白字符\w+_
之后的下划线^\s*
。
此外,在命名的捕获组(?P<value>\d+)
中,您匹配的1个以上数字与ami-234sefsrwerwer21
不匹配
对于示例数据,您可能还会做的是仅使用两个捕获组,并在第二个组中使用character class来指定允许匹配的内容:
^\s*(?P<key>amiAutoscale)\s*:\s*(?P<value>[\w-]+)