[kwlug-disc] Saltstack multi-line replace

Mikalai Birukou mb at 3nsoft.com
Fri Apr 3 18:28:36 EDT 2020


> That is only for insert or ensure. I would need replace. I have used
> before and after before, but I am not sure they refer to a search
> range.
>
> file.blockreplace could work if I can figure out how to comment the
> original block.
>
> Another very bad idea might be to change "video_resolution" to
> "video_resolution_bad".

It may be. How about these three steps:

1) replace match of "<non_marker>video_resolution" 
to"video_resolution_bad". Aka hacky removal.

2) if marker-start is not found, insert marker-start and marker-end lines.

3) file.blockreplace between between markers.

>   That should change the underlying dictionary,
> and then I can use file.blockreplace to insert the new block that I
> want. That is still not ideal but it might work better than
> controlling the entire file. Hopefully the underlying application
> consuming the YAML will just ignore the parts it does not recognise...
>
> - Paul
>
> On Fri, Apr 03, 2020 at 06:02:18PM -0400, Mikalai Birukou via kwlug-disc wrote:
>> I haven't used it, but reading https://docs.saltstack.com/en/latest/ref/states/all/salt.states.file.html#salt.states.file.line
>>
>> suggests that there are before and after arguments. Can you try after =
>> "video_resolution:" and some before, that should be present in the file. may
>> be like comment "#end of video_resolution"?
>>
>> And then mode arg should be chosen: ensure sounds appropriate to keep
>> certain value.
>>
>> My two cents :)
>>
>> On 2020-04-03 5:42 p.m., Paul Nijjar via kwlug-disc wrote:
>>> As I have been learning Salt I have been figuring out different idioms
>>> for editing files. One way is to take control of the entire file
>>> (file.managed). Another is to edit line by line, using regexps to find
>>> the lines (file.line) . Now I am in a situation where there is a file
>>> I would prefer not to manage fully, but for which I cannot figure out
>>> how to edit lines because there is not enough context.
>>>
>>>
>>> The file is YAML, and looks something like this:
>>>
>>> video_resolution:
>>>    high:
>>>      - fooblaz: xyz
>>>      - quality: 200
>>>    medium:
>>>      - fooblaz: xyz
>>>      - quality: 100
>>>    low:
>>>      - fooblaz: zyy
>>>      - quality: 75
>>>
>>>
>>> Each of these elements has a "quality" element I would like to
>>> twiddle. I do not want all of the elements to be the same, and I want
>>> to twiddle them independently.
>>>
>>> file.managed would work but then I have to control a big file that
>>> might be changing in other ways.
>>>
>>> I cannot figure out how to use file.line .
>>>
>>> Are there other options?
>>>
>>> - Paul
>> _______________________________________________
>> kwlug-disc mailing list
>> kwlug-disc at kwlug.org
>> https://kwlug.org/mailman/listinfo/kwlug-disc_kwlug.org
-- 
Mikalai Birukou
CEO | 3NSoft Inc.




More information about the kwlug-disc mailing list