]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
cephadm: convert SNMPGateway create_daemon_conf to use write_new
authorJohn Mulligan <jmulligan@redhat.com>
Tue, 6 Jun 2023 17:16:29 +0000 (13:16 -0400)
committerJohn Mulligan <jmulligan@redhat.com>
Tue, 6 Jun 2023 18:24:06 +0000 (14:24 -0400)
While it is not entirely clear why this pattern of using os.open and
posix open flags instead of `open` directly was used I determined (using
strace) that the only major difference between these open flags and
those used by `open` was the lack of O_TRUNC. Unlike some other cases
this function does not use an intermediate temporary file.  This means
that if the file being written already exists and the data being written
is smaller then the remaining data will not be over-written.

Example:
```
$ cat existing
AAAAAAAA
$ cat existing
bbbAAAAA
```

I looked over the context that this function is used in and decided that
this behavior must not be intentional. Thus it should be safe
to convert this function to `write_new`.

Signed-off-by: John Mulligan <jmulligan@redhat.com>
src/cephadm/cephadm.py

index 86ac0067a8f8a5e70ae1a399fca2a40790ffb7cc..f96a9984a1f12b03ba059ee09f84d5efd9a71fa3 100755 (executable)
@@ -511,7 +511,7 @@ class SNMPGateway:
 
     def create_daemon_conf(self) -> None:
         """Creates the environment file holding 'secrets' passed to the snmp-notifier daemon"""
-        with open(os.open(self.conf_file_path, os.O_CREAT | os.O_WRONLY, 0o600), 'w') as f:
+        with write_new(self.conf_file_path, perms=0o600) as f:
             if self.snmp_version == 'V2c':
                 f.write(f'SNMP_NOTIFIER_COMMUNITY={self.snmp_community}\n')
             else: