[Fuego] [PATCH] Allow ftc script to properly use Jenkins configured port

Tim.Bird at sony.com Tim.Bird at sony.com
Thu Feb 8 19:17:21 UTC 2018


> -----Original Message-----
> From: Guilherme Campos Camargo
>
> Hello, Tim. Please see my modifications below. I was looking for an
> utils directory/submodule with existing python stuff where I could store
> the newly added read_conf function, but haven't found any. Given that
> the function file is very straightforward, I just left it in here, right
> next to your other utility function. Please let me know if you'd rather
> have it moved somewhere else.
Probably, but I'm not sure where yet

> 
> Anyway, I think it would be nice if we could keep these and other python
> utility funcions in a separate submodule in the future, so that they can
> be easily imported by different python scripts. Please let me know what
> you think about that.
I agree completely.  I suspect other files may have the hardcoded 8080 in
them, and sharing a utility routine to read the configuration will be good.
Also, it's unknown what other features and data we'll add to conf file, so it would
be nice to have a single routine that reads it, in case it gets gnarly later.

This is OK placement for now, though.
> 
> Thanks
> 
> --
> Commit Message:
> 
> With the possibility of configuring jenkins porth through
> fuego/ro/conf/fuego.conf, a change on ftc script is needed so that it
> uses the configured port and not the default one (8080).
> 
> This patch solves that issue by using the ${jenkins_port} environment
> variable (set on entrypoint.sh) instead of the hardcoded 8080.
> 
> Signed-off-by: Guilherme Campos Camargo <guicc at profusion.mobi>
> ---
>  engine/scripts/ftc | 30 ++++++++++++++++++++++--------
>  1 file changed, 22 insertions(+), 8 deletions(-)
> 
> diff --git a/engine/scripts/ftc b/engine/scripts/ftc
> index 06dadcf..2cf0019 100755
> --- a/engine/scripts/ftc
> +++ b/engine/scripts/ftc
> @@ -60,19 +60,33 @@ import glob
>  # MAJOR, MINOR, REVISION
>  VERSION = (1,2,1)
> 
> -# define these as globals
> -log = None
> -tail_fd = None
> -
>  # here's a utility routine to print a variable with it's name and value
>  def pvar(name):
>      caller = sys._getframe(1)
>      print "DEBUG: python var %s=%s" % (name, caller.f_locals[name])
> 
> +# here's a utility routine that reads from a configuration file where configs
> +# are stored as KEY=VALUE pairs (as .env files)
> +def read_conf(fname):
> +    def split_pair(line):
> +        return line.strip().split('=', 1)
> +    with open(fname) as f:
> +        pairs = [split_pair(line) for line in f.readlines()]
> +        return dict(pairs)
I'll probably expand this a bit, to handle blank lines and lines preceded with '#'.
It might be good to get one more strip in there as well, on the split items
to handle stuff like:
'   foo   =      bar    '
But I'll do that in a separate patch (and as a lower priority change).

I love the simplicity of this routine, by the way. 

> +
> +# define these as globals
> +log = None
> +tail_fd = None
> +
> +FUEGO_CFG_PATH = '/fuego-ro/conf/fuego.conf'
> +fuego_config = read_conf(FUEGO_CFG_PATH)
This needs to be done after the check for whether we're inside the
docker container, or check the environment for FUEGO_RO.

ftc run outside the container won't be able to read the configuration
file from under /fuego-ro (that is, at the root).

See the code for checking inside_docker() at the top of the 'main' function.

If it's too complicated to move the read_conf, then for now, I'd be satisfied
with checking for the existence of '/fuego-ro', and just returning an empty dictionary.
The only thing that an outside-the-container 'ftc' does is immediately call 'ftc'
inside the container.  So it shouldn't need any configuration values.
(cross our fingers and hope it stays that way....)
We don't really have a mechanism to figure out where the conf file is when
'ftc' is outside the container (especially if there are multiple fuegos running
around), so we don't have much choice.

> +jenkins_port = fuego_config.get('jenkins_port', 8080)
> +fuego_url = 'http://localhost:' + str(jenkins_port) + '/fuego'
> +
>  quiet = 0
>  verbose = 0
>  use_statusouput = 1
> -server = jenkins.Jenkins('http://localhost:8080/fuego')
> +server = jenkins.Jenkins(fuego_url)
> 
>  # keep configuration file in /fuego-ro/conf area
>  config_dir = "/fuego-ro"
> @@ -413,7 +427,7 @@ class config_class:
> 
>          # fuegotest.com is at: 52.88.166.49
>          self.SERVER_URL_BASE =
> "http://52.88.166.49/server/Fuego_Server?action=Fuego."
> -        self.JENKINS_URL = "http://localhost:8080/fuego"
> +        self.JENKINS_URL = fuego_url
> 
>          # end of default configs
> 
> @@ -1159,7 +1173,7 @@ timeout --signal=9 {timeout} /bin/bash
> $FUEGO_CORE/engine/scripts/main.sh
>      job_name=board+"."+test.spec+"."+test.name
>      print("Creating job " + job_name)
>      try:
> -        subprocess.call('java -jar /var/cache/jenkins/war/WEB-INF/jenkins-
> cli.jar -s http://localhost:8080/fuego create-job ' +
> +        subprocess.call('java -jar /var/cache/jenkins/war/WEB-INF/jenkins-
> cli.jar -s' + fuego_url + 'create-job ' +
>              job_name + ' < ' + tmp, shell=True)
>          os.unlink(tmp)
>      except Exception as e:
> @@ -1207,7 +1221,7 @@ def create_batch_job(board, testplan, plan_tests):
>      print("Creating batch job ")
>      try:
>          job_name = board+'.'+testplan+'.batch'
> -        subprocess.call('java -jar /var/cache/jenkins/war/WEB-INF/jenkins-
> cli.jar -s http://localhost:8080/fuego create-job ' +
> +        subprocess.call('java -jar /var/cache/jenkins/war/WEB-INF/jenkins-
> cli.jar -s' + fuego_url + 'create-job ' +
>               job_name + '< ' + tmp, shell=True)
>          os.unlink(tmp)
>      except Exception as e:
> --
> 2.16.1


The rest of this is fine.
 -- Tim



More information about the Fuego mailing list