Skip to content

Commit a43146a

Browse files
authored
operations.files.block/connectors.util: use correct temporary directory
Properly respects the config temp directory variables everywhere.
1 parent 6677c61 commit a43146a

13 files changed

+118
-49
lines changed

src/pyinfra/api/host.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,9 @@ def _get_temp_directory(self):
328328

329329
return temp_directory
330330

331+
def get_temp_dir_config(self):
332+
return self.state.config.TEMP_DIR or self.state.config.DEFAULT_TEMP_DIR
333+
331334
def get_temp_filename(
332335
self,
333336
hash_key: Optional[str] = None,

src/pyinfra/connectors/util.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,17 @@
2222

2323

2424
SUDO_ASKPASS_ENV_VAR = "PYINFRA_SUDO_PASSWORD"
25+
26+
2527
SUDO_ASKPASS_COMMAND = r"""
26-
temp=$(mktemp "${{TMPDIR:=/tmp}}/pyinfra-sudo-askpass-XXXXXXXXXXXX")
28+
temp=$(mktemp "${{TMPDIR:={0}}}/pyinfra-sudo-askpass-XXXXXXXXXXXX")
2729
cat >"$temp"<<'__EOF__'
2830
#!/bin/sh
29-
printf '%s\n' "${0}"
31+
printf '%s\n' "${1}"
3032
__EOF__
3133
chmod 755 "$temp"
3234
echo "$temp"
33-
""".format(
34-
SUDO_ASKPASS_ENV_VAR,
35-
)
35+
"""
3636

3737

3838
def run_local_process(
@@ -264,7 +264,9 @@ def extract_control_arguments(arguments: "ConnectorArguments") -> "ConnectorArgu
264264
def _ensure_sudo_askpass_set_for_host(host: "Host"):
265265
if host.connector_data.get("sudo_askpass_path"):
266266
return
267-
_, output = host.run_shell_command(SUDO_ASKPASS_COMMAND)
267+
_, output = host.run_shell_command(
268+
SUDO_ASKPASS_COMMAND.format(host.get_temp_dir_config(), SUDO_ASKPASS_ENV_VAR)
269+
)
268270
host.connector_data["sudo_askpass_path"] = shlex.quote(output.stdout_lines[0])
269271

270272

src/pyinfra/operations/files.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1803,6 +1803,8 @@ def block(
18031803
current = host.get_fact(Block, path=path, marker=marker, begin=begin, end=end)
18041804
cmd = None
18051805

1806+
tmp_dir = host.get_temp_dir_config()
1807+
18061808
# standard awk doesn't have an "in-place edit" option so we write to a tempfile and
18071809
# if edits were successful move to dest i.e. we do: <out_prep> ... do some work ... <real_out>
18081810
q_path = QuoteString(path)
@@ -1818,7 +1820,7 @@ def block(
18181820
)
18191821
)
18201822
out_prep = StringCommand(
1821-
'OUT="$(TMPDIR=/tmp mktemp -t pyinfra.XXXXXX)" && ',
1823+
f'OUT="$(TMPDIR={tmp_dir} mktemp -t pyinfra.XXXXXX)" && ',
18221824
*mode_get,
18231825
'OWNER="$(stat -c "%u:%g"',
18241826
q_path,
Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,24 @@
11
{
2-
"require_platform": ["Darwin", "Linux"],
3-
"args": ["/home/someone/something"],
2+
"require_platform": [
3+
"Darwin",
4+
"Linux"
5+
],
6+
"args": [
7+
"/home/someone/something"
8+
],
49
"kwargs": {
510
"content": "should be this",
611
"line": "before this",
712
"before": true
813
},
914
"facts": {
1015
"files.Block": {
11-
"begin=None, end=None, marker=None, path=/home/someone/something": ["previously was something else"]
16+
"begin=None, end=None, marker=None, path=/home/someone/something": [
17+
"previously was something else"
18+
]
1219
}
1320
},
1421
"commands": [
15-
"OUT=\"$(TMPDIR=/tmp mktemp -t pyinfra.XXXXXX)\" && MODE=\"$(stat -c %a /home/someone/something 2>/dev/null || stat -f %Lp /home/someone/something 2>/dev/null)\" && OWNER=\"$(stat -c \"%u:%g\" /home/someone/something 2>/dev/null || stat -f \"%u:%g\" /home/someone/something 2>/dev/null || echo $(id -un):$(id -gn))\" && awk 'BEGIN {{f=1; x=ARGV[2]; ARGV[2]=\"\"}}/# BEGIN PYINFRA BLOCK/ {print; print x; f=0} /# END PYINFRA BLOCK/ {print; f=1; next} f' /home/someone/something \"should be this\" > \"$OUT\" && mv \"$OUT\" /home/someone/something && chown \"$OWNER\" /home/someone/something && chmod \"$MODE\" /home/someone/something"
22+
"OUT=\"$(TMPDIR=_tempdir_ mktemp -t pyinfra.XXXXXX)\" && MODE=\"$(stat -c %a /home/someone/something 2>/dev/null || stat -f %Lp /home/someone/something 2>/dev/null)\" && OWNER=\"$(stat -c \"%u:%g\" /home/someone/something 2>/dev/null || stat -f \"%u:%g\" /home/someone/something 2>/dev/null || echo $(id -un):$(id -gn))\" && awk 'BEGIN {{f=1; x=ARGV[2]; ARGV[2]=\"\"}}/# BEGIN PYINFRA BLOCK/ {print; print x; f=0} /# END PYINFRA BLOCK/ {print; f=1; next} f' /home/someone/something \"should be this\" > \"$OUT\" && mv \"$OUT\" /home/someone/something && chown \"$OWNER\" /home/someone/something && chmod \"$MODE\" /home/someone/something"
1623
]
17-
}
24+
}
Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
{
2-
"require_platform": ["Darwin", "Linux"],
3-
"args": ["/home/someone/something"],
2+
"require_platform": [
3+
"Darwin",
4+
"Linux"
5+
],
6+
"args": [
7+
"/home/someone/something"
8+
],
49
"kwargs": {
510
"content": "should be this",
611
"line": "before this",
@@ -9,10 +14,12 @@
914
},
1015
"facts": {
1116
"files.Block": {
12-
"begin=None, end=None, marker=None, path=/home/someone/something": ["previously was something else"]
17+
"begin=None, end=None, marker=None, path=/home/someone/something": [
18+
"previously was something else"
19+
]
1320
}
1421
},
1522
"commands": [
16-
"cp /home/someone/something /home/someone/something.a-timestamp && OUT=\"$(TMPDIR=/tmp mktemp -t pyinfra.XXXXXX)\" && MODE=\"$(stat -c %a /home/someone/something 2>/dev/null || stat -f %Lp /home/someone/something 2>/dev/null)\" && OWNER=\"$(stat -c \"%u:%g\" /home/someone/something 2>/dev/null || stat -f \"%u:%g\" /home/someone/something 2>/dev/null || echo $(id -un):$(id -gn))\" && awk 'BEGIN {{f=1; x=ARGV[2]; ARGV[2]=\"\"}}/# BEGIN PYINFRA BLOCK/ {print; print x; f=0} /# END PYINFRA BLOCK/ {print; f=1; next} f' /home/someone/something \"should be this\" > \"$OUT\" && mv \"$OUT\" /home/someone/something && chown \"$OWNER\" /home/someone/something && chmod \"$MODE\" /home/someone/something"
23+
"cp /home/someone/something /home/someone/something.a-timestamp && OUT=\"$(TMPDIR=_tempdir_ mktemp -t pyinfra.XXXXXX)\" && MODE=\"$(stat -c %a /home/someone/something 2>/dev/null || stat -f %Lp /home/someone/something 2>/dev/null)\" && OWNER=\"$(stat -c \"%u:%g\" /home/someone/something 2>/dev/null || stat -f \"%u:%g\" /home/someone/something 2>/dev/null || echo $(id -un):$(id -gn))\" && awk 'BEGIN {{f=1; x=ARGV[2]; ARGV[2]=\"\"}}/# BEGIN PYINFRA BLOCK/ {print; print x; f=0} /# END PYINFRA BLOCK/ {print; f=1; next} f' /home/someone/something \"should be this\" > \"$OUT\" && mv \"$OUT\" /home/someone/something && chown \"$OWNER\" /home/someone/something && chmod \"$MODE\" /home/someone/something"
1724
]
18-
}
25+
}
Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,28 @@
11
{
2-
"require_platform": ["Darwin", "Linux"],
3-
"args": ["/home/someone/something"],
2+
"require_platform": [
3+
"Darwin",
4+
"Linux"
5+
],
6+
"args": [
7+
"/home/someone/something"
8+
],
49
"kwargs": {
5-
"content": ["should be this", "and this", "and even this"],
10+
"content": [
11+
"should be this",
12+
"and this",
13+
"and even this"
14+
],
615
"line": "before this",
716
"before": true
817
},
918
"facts": {
1019
"files.Block": {
11-
"begin=None, end=None, marker=None, path=/home/someone/something": ["previously was something else"]
20+
"begin=None, end=None, marker=None, path=/home/someone/something": [
21+
"previously was something else"
22+
]
1223
}
1324
},
1425
"commands": [
15-
"OUT=\"$(TMPDIR=/tmp mktemp -t pyinfra.XXXXXX)\" && MODE=\"$(stat -c %a /home/someone/something 2>/dev/null || stat -f %Lp /home/someone/something 2>/dev/null)\" && OWNER=\"$(stat -c \"%u:%g\" /home/someone/something 2>/dev/null || stat -f \"%u:%g\" /home/someone/something 2>/dev/null || echo $(id -un):$(id -gn))\" && awk 'BEGIN {{f=1; x=ARGV[2]; ARGV[2]=\"\"}}/# BEGIN PYINFRA BLOCK/ {print; print x; f=0} /# END PYINFRA BLOCK/ {print; f=1; next} f' /home/someone/something \"should be this\nand this\nand even this\" > \"$OUT\" && mv \"$OUT\" /home/someone/something && chown \"$OWNER\" /home/someone/something && chmod \"$MODE\" /home/someone/something"
26+
"OUT=\"$(TMPDIR=_tempdir_ mktemp -t pyinfra.XXXXXX)\" && MODE=\"$(stat -c %a /home/someone/something 2>/dev/null || stat -f %Lp /home/someone/something 2>/dev/null)\" && OWNER=\"$(stat -c \"%u:%g\" /home/someone/something 2>/dev/null || stat -f \"%u:%g\" /home/someone/something 2>/dev/null || echo $(id -un):$(id -gn))\" && awk 'BEGIN {{f=1; x=ARGV[2]; ARGV[2]=\"\"}}/# BEGIN PYINFRA BLOCK/ {print; print x; f=0} /# END PYINFRA BLOCK/ {print; f=1; next} f' /home/someone/something \"should be this\nand this\nand even this\" > \"$OUT\" && mv \"$OUT\" /home/someone/something && chown \"$OWNER\" /home/someone/something && chmod \"$MODE\" /home/someone/something"
1627
]
17-
}
28+
}
Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
{
2-
"require_platform": ["Darwin", "Linux"],
3-
"args": ["/home/someone/something"],
2+
"require_platform": [
3+
"Darwin",
4+
"Linux"
5+
],
6+
"args": [
7+
"/home/someone/something"
8+
],
49
"kwargs": {
510
"content": "please add this",
611
"before": true,
@@ -12,6 +17,6 @@
1217
}
1318
},
1419
"commands": [
15-
"OUT=\"$(TMPDIR=/tmp mktemp -t pyinfra.XXXXXX)\" && OWNER=\"$(stat -c \"%u:%g\" /home/someone/something 2>/dev/null || stat -f \"%u:%g\" /home/someone/something 2>/dev/null || echo $(id -un):$(id -gn))\" && ( awk '{{print}}' - /dev/null > \"$OUT\" <<PYINFRAHERE\n# BEGIN PYINFRA BLOCK\nplease add this\n# END PYINFRA BLOCK\nPYINFRAHERE\n ) && mv \"$OUT\" /home/someone/something && chown \"$OWNER\" /home/someone/something /home/someone/something"
20+
"OUT=\"$(TMPDIR=_tempdir_ mktemp -t pyinfra.XXXXXX)\" && OWNER=\"$(stat -c \"%u:%g\" /home/someone/something 2>/dev/null || stat -f \"%u:%g\" /home/someone/something 2>/dev/null || echo $(id -un):$(id -gn))\" && ( awk '{{print}}' - /dev/null > \"$OUT\" <<PYINFRAHERE\n# BEGIN PYINFRA BLOCK\nplease add this\n# END PYINFRA BLOCK\nPYINFRAHERE\n ) && mv \"$OUT\" /home/someone/something && chown \"$OWNER\" /home/someone/something /home/someone/something"
1621
]
17-
}
22+
}
Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
{
2-
"require_platform": ["Darwin", "Linux"],
3-
"args": ["/home/someone/something"],
2+
"require_platform": [
3+
"Darwin",
4+
"Linux"
5+
],
6+
"args": [
7+
"/home/someone/something"
8+
],
49
"kwargs": {
510
"content": "please add this",
611
"line": "before this",
@@ -12,6 +17,6 @@
1217
}
1318
},
1419
"commands": [
15-
"OUT=\"$(TMPDIR=/tmp mktemp -t pyinfra.XXXXXX)\" && MODE=\"$(stat -c %a /home/someone/something 2>/dev/null || stat -f %Lp /home/someone/something 2>/dev/null)\" && OWNER=\"$(stat -c \"%u:%g\" /home/someone/something 2>/dev/null || stat -f \"%u:%g\" /home/someone/something 2>/dev/null || echo $(id -un):$(id -gn))\" && awk 'BEGIN {x=ARGV[2]; ARGV[2]=\"\"} f!=1 && /^.*before this.*$/ { print x; f=1} END {if (f==0) print x } { print }' /home/someone/something \"# BEGIN PYINFRA BLOCK\nplease add this\n# END PYINFRA BLOCK\" > \"$OUT\" && mv \"$OUT\" /home/someone/something && chown \"$OWNER\" /home/someone/something && chmod \"$MODE\" /home/someone/something"
20+
"OUT=\"$(TMPDIR=_tempdir_ mktemp -t pyinfra.XXXXXX)\" && MODE=\"$(stat -c %a /home/someone/something 2>/dev/null || stat -f %Lp /home/someone/something 2>/dev/null)\" && OWNER=\"$(stat -c \"%u:%g\" /home/someone/something 2>/dev/null || stat -f \"%u:%g\" /home/someone/something 2>/dev/null || echo $(id -un):$(id -gn))\" && awk 'BEGIN {x=ARGV[2]; ARGV[2]=\"\"} f!=1 && /^.*before this.*$/ { print x; f=1} END {if (f==0) print x } { print }' /home/someone/something \"# BEGIN PYINFRA BLOCK\nplease add this\n# END PYINFRA BLOCK\" > \"$OUT\" && mv \"$OUT\" /home/someone/something && chown \"$OWNER\" /home/someone/something && chmod \"$MODE\" /home/someone/something"
1621
]
17-
}
22+
}

tests/operations/files.block/add_no_existing_block_line_provided_escape_regex.json

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
{
2-
"require_platform": ["Darwin", "Linux"],
3-
"args": ["/home/someone/something"],
2+
"require_platform": [
3+
"Darwin",
4+
"Linux"
5+
],
6+
"args": [
7+
"/home/someone/something"
8+
],
49
"kwargs": {
510
"content": "please add this",
611
"line": "before this *",
@@ -13,6 +18,6 @@
1318
}
1419
},
1520
"commands": [
16-
"OUT=\"$(TMPDIR=/tmp mktemp -t pyinfra.XXXXXX)\" && MODE=\"$(stat -c %a /home/someone/something 2>/dev/null || stat -f %Lp /home/someone/something 2>/dev/null)\" && OWNER=\"$(stat -c \"%u:%g\" /home/someone/something 2>/dev/null || stat -f \"%u:%g\" /home/someone/something 2>/dev/null || echo $(id -un):$(id -gn))\" && awk 'BEGIN {x=ARGV[2]; ARGV[2]=\"\"} f!=1 && /^.*before this \\*.*$/ { print x; f=1} END {if (f==0) print x } { print }' /home/someone/something \"# BEGIN PYINFRA BLOCK\nplease add this\n# END PYINFRA BLOCK\" > \"$OUT\" && mv \"$OUT\" /home/someone/something && chown \"$OWNER\" /home/someone/something && chmod \"$MODE\" /home/someone/something"
21+
"OUT=\"$(TMPDIR=_tempdir_ mktemp -t pyinfra.XXXXXX)\" && MODE=\"$(stat -c %a /home/someone/something 2>/dev/null || stat -f %Lp /home/someone/something 2>/dev/null)\" && OWNER=\"$(stat -c \"%u:%g\" /home/someone/something 2>/dev/null || stat -f \"%u:%g\" /home/someone/something 2>/dev/null || echo $(id -un):$(id -gn))\" && awk 'BEGIN {x=ARGV[2]; ARGV[2]=\"\"} f!=1 && /^.*before this \\*.*$/ { print x; f=1} END {if (f==0) print x } { print }' /home/someone/something \"# BEGIN PYINFRA BLOCK\nplease add this\n# END PYINFRA BLOCK\" > \"$OUT\" && mv \"$OUT\" /home/someone/something && chown \"$OWNER\" /home/someone/something && chmod \"$MODE\" /home/someone/something"
1722
]
18-
}
23+
}
Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
{
2-
"require_platform": ["Darwin", "Linux"],
3-
"args": ["/home/someone/something"],
2+
"require_platform": [
3+
"Darwin",
4+
"Linux"
5+
],
6+
"args": [
7+
"/home/someone/something"
8+
],
49
"kwargs": {
510
"content": "please add this",
611
"line": "after this",
@@ -12,6 +17,6 @@
1217
}
1318
},
1419
"commands": [
15-
"OUT=\"$(TMPDIR=/tmp mktemp -t pyinfra.XXXXXX)\" && OWNER=\"$(stat -c \"%u:%g\" /home/someone/something 2>/dev/null || stat -f \"%u:%g\" /home/someone/something 2>/dev/null || echo $(id -un):$(id -gn))\" && ( awk '{{print}}' /dev/null - > \"$OUT\" <<PYINFRAHERE\n# BEGIN PYINFRA BLOCK\nplease add this\n# END PYINFRA BLOCK\nPYINFRAHERE\n ) && mv \"$OUT\" /home/someone/something && chown \"$OWNER\" /home/someone/something /home/someone/something"
20+
"OUT=\"$(TMPDIR=_tempdir_ mktemp -t pyinfra.XXXXXX)\" && OWNER=\"$(stat -c \"%u:%g\" /home/someone/something 2>/dev/null || stat -f \"%u:%g\" /home/someone/something 2>/dev/null || echo $(id -un):$(id -gn))\" && ( awk '{{print}}' /dev/null - > \"$OUT\" <<PYINFRAHERE\n# BEGIN PYINFRA BLOCK\nplease add this\n# END PYINFRA BLOCK\nPYINFRAHERE\n ) && mv \"$OUT\" /home/someone/something && chown \"$OWNER\" /home/someone/something /home/someone/something"
1621
]
17-
}
22+
}

0 commit comments

Comments
 (0)