Skip to content

Commit 91af7df

Browse files
authored
Merge pull request #177 from olehermanse/master
Fixed handling of role and agent fields in data
2 parents 7e23fde + 08b1008 commit 91af7df

3 files changed

Lines changed: 29 additions & 10 deletions

File tree

cf_remote/commands.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1056,10 +1056,10 @@ def agent(hosts, bootstrap=None):
10561056
for host in hosts:
10571057
data = get_info(host)
10581058

1059-
if not data["agent_location"]:
1059+
if not data["agent"]:
10601060
raise CFRExitError("CFEngine not installed on {}".format(host))
10611061

1062-
command = "{}".format(data["agent_location"])
1062+
command = "{}".format(data["agent"])
10631063
if bootstrap:
10641064
command += "--bootstrap {}".format(bootstrap[0])
10651065

cf_remote/remote.py

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -216,16 +216,31 @@ def get_info(host, *, users=None, connection=None):
216216
data["ssh_user"] = user
217217

218218
systeminfo = ssh_cmd(connection, "systeminfo")
219-
if systeminfo and "command not found" not in systeminfo:
219+
assert systeminfo is None or (type(systeminfo) is str and len(systeminfo) > 0)
220+
# Note: ssh_cmd is supposed to return None on failure however, it seems
221+
# like there are some cases where it returns output on failure
222+
# because the exit code was 0
223+
# TODO / Workaround:
224+
if systeminfo == "bash: systeminfo: command not found":
225+
systeminfo = None
226+
if systeminfo:
220227
data["os"] = "windows"
221228
data["systeminfo"] = parse_systeminfo(systeminfo)
222229
data["package_tags"] = ["x86_64", "msi"]
223230
data["arch"] = "x86_64"
224231
agent = r"& 'C:\Program Files\Cfengine\bin\cf-agent.exe'"
225-
data["agent"] = agent
226232
version_cmd = powershell("{} -V".format(agent))
227-
data["agent_version"] = parse_version(ssh_cmd(connection, version_cmd))
233+
version_output = ssh_cmd(connection, version_cmd)
234+
if version_output:
235+
data["agent"] = agent
236+
else:
237+
data["agent"] = None
238+
data["agent_version"] = parse_version(version_output)
228239
data["role"] = "client"
240+
if data["agent_version"]:
241+
data["role"] = "client"
242+
else:
243+
data["role"] = None
229244
else:
230245
data["os"] = "unix"
231246

@@ -270,12 +285,15 @@ def get_info(host, *, users=None, connection=None):
270285

271286
data["package_tags"] = get_package_tags(os_release_data, redhat_release_data)
272287
data["cfengine_id"] = discovery.get("NTD_CFENGINE_ID")
273-
data["agent_location"] = discovery.get("NTD_CFAGENT_PATH")
288+
data["agent"] = discovery.get("NTD_CFAGENT_PATH")
274289
data["policy_server"] = discovery.get("NTD_POLICY_SERVER")
275-
agent = r"/var/cfengine/bin/cf-agent"
276-
data["agent"] = agent
277290
data["agent_version"] = parse_version(discovery.get("NTD_CFAGENT_VERSION"))
278-
data["role"] = "hub" if discovery.get("NTD_CFHUB") else "client"
291+
if discovery.get("NTD_CFHUB"):
292+
data["role"] = "hub"
293+
elif discovery.get("NTD_CFAGENT_PATH"):
294+
data["role"] = "client"
295+
else:
296+
data["role"] = None
279297

280298
data["bin"] = {}
281299
for bin in [

cf_remote/ssh.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import shutil
55
import signal
66
import subprocess
7+
from typing import Union
78
from urllib.parse import urlparse
89

910
from cf_remote import aramid
@@ -243,7 +244,7 @@ def scp(file, remote, connection=None, rename=None, hide=False):
243244
return 0
244245

245246

246-
def ssh_cmd(connection, cmd, errors=False, needs_pty=True):
247+
def ssh_cmd(connection, cmd, errors=False, needs_pty=True) -> Union[str, None]:
247248
assert connection
248249

249250
if needs_pty:

0 commit comments

Comments
 (0)