Sziasztok!
Regexp szakik, segítsetek!
Konfigurációban szeretném cserélni, ha a változómnak nem az az értéke, amit én szeretnék.
logsize = 800M
Ha kikommenteléssel kezdődik, az meg van; a végével vagyok gondban. A (800M)$ oké, de hogy negálom a keresett sztringet?
Vagyis amit szeretnék, mindensor, ami kezdődik log_size (space vagy tab) = (space vagy tab) és a vége nem 800M
Tudom template egyszerűbb lenne, de pár értéket csak bizonyos esetben szeretnék módisítani, a már konfigurált szolgáltatáson.
Köszi!
K
- 187 megtekintés
Hozzászólások
Én ezt úgy szoktam, hogy minden ami logsizével kezdődik, azt cserélje, pl.:
s/^logsize =.*/logsize = 800M/
Ki nem próbáltam, de valami ilyesmi. Aztán lehet cicomázni whitespace-ekkel, van/nincs, ha kell. Ha nagyon katyvasz a környezet, akkor kell, egyébként meg ajánlott.
Szóval akkor:
- name: replace text
become: yes
ansible.builtin.replace:
path: /tmp/example.cfg
regexp: '^[ ]{0,}logsize[ ]{0,}=[ ]{0,}.*$'
replace: 'logsize = 800M'
Előtte:
##
##
# logsize = 45433
logsize = 45433
logsize = 45433
log size = 45664
logsize=7777
Utána:
##
##
# logsize = 45433
logsize = 800M
logsize = 800M
log size = 45664
logsize = 800M
Lehet még ügyeskedni a regex szigorúbbá tételére, mondjuk hogy muszáj számoknak lennie benne, meg a szóköz bővíthető tabbal is, ízlés szerint. Meg gondolom van még legalább 10 másféle megoldás.
Update: és ha nem nézem be, ez csak akkor tol replace-t, ha nem 800M:
regexp: '^([ ]{0,}logsize[ ]{0,}=[ ]{0,})(?![ ]{0,}800M).*$'
replace: 'logsize = 800M'
Ennek mondjuk akkor látom a legtöbb értelmét, hogy ha csak akkor indítja újra a valamit, ha változás volt a konfigban :)
- A hozzászóláshoz be kell jelentkezni
Ha nagyon biztos vagy abban hogy pontosan egy sor illeszkedik akkor oké lehet, ellenkező esetben azért ez játék a tűzzel
- A hozzászóláshoz be kell jelentkezni
^logsize[ \t]=[ \t](?!800M).+$
(De nem értem, miért kell ennyire elbonyolítani, ennyi erővel kikeresed a logsize kezdetű sorokat, és kicseréled "logsize = 800M"-re, mert ha az volt benne előtte, és ugyanarra cseréled, mi lesz?)
- A hozzászóláshoz be kell jelentkezni
- name: set logsize
lineinfile:
path: /path/to/file.conf
regexp: '^logsize\s+=\s+[0-9].*$'
line: 'logsize = 800M'
így csinálnám, nem törődve a tabokkal.
- A hozzászóláshoz be kell jelentkezni
Az eddigi válaszoknál szerintem jobb lesz ezt használni:
https://docs.ansible.com/ansible/latest/collections/community/general/i…
Felteszem valami ini/cfg jellegű fájlban van a bejegyzés. Pl.:
- name: Ensure that the necessary PHP options are set
ini_file:
dest: /etc/php.ini
section: "{{ item.section }}"
option: "{{ item.key }}"
value: "{{ item.value }}"
backup: yes
with_items:
- { section: 'PHP', key: 'cgi.fix_pathinfo', value: '0' }
- { section: 'PHP', key: 'memory_limit', value: '2G' }
- { section: 'PHP', key: 'max_execution_time', value: '1800' }
- { section: 'PHP', key: 'zlib.output_compression', value: 'On' }
- { section: 'Session', key: 'session.save_path', value: '"/var/lib/php/session"' }
(Amúgy miért nincs yaml a kódbeillesztéskor syntax highlight-ra?)
- A hozzászóláshoz be kell jelentkezni
De jó, mindig tanul az ember :)
- A hozzászóláshoz be kell jelentkezni
szeretném cserélni, ha a változómnak nem az az értéke, amit én szeretnék
Ansible esetén "ha a változómnak nem az az értéke, amit én szeretnék" egy fölösleges gondolat. A deklaratív moduljai úgy vannak megírva, hogy te leírod, hogy mi legyen az eredmény, a modul meg felismeri, hogy kell-e változtatni ehhez. Ha nem, akkor nem változtat. Ezért szeretjük ezeket a deklaratív modulokat. Persze ha imperatív megoldást választasz (pl. egy shell parancsot írsz rá), akkor ezt neked kell leprogramoznod. Ami általában szopacs. Ezért ezt el szokás kerülni.
- A hozzászóláshoz be kell jelentkezni