Hi all,

@Petr: we are running the playbook from the shell. Launching "scl enable" 
through the shell / command / script modules doesn't work AFAIK (Ansible never 
returns). Last week I tried sourcing /opt/rh/rh-maven35/enable, and it seems to 
be roughly equivalent to running "scl enable". Thus I compared the environment 
variables before and after sourcing that file, and came up with this:

- name: check version maven
  command: /opt/rh/rh-maven35/root/usr/bin/mvn --version
  environment:
    MANPATH: "/opt/rh/rh-maven35/root/usr/share/man"
    JAVACONFDIRS: "/opt/rh/rh-maven35/root/etc/java"
    XDG_CONFIG_DIRS: "/opt/rh/rh-maven35/root/etc/xdg:/etc/xdg"
    PATH: "/opt/rh/rh-maven35/root/usr/bin:{{ ansible_env.PATH }}"
    PYTHONPATH: "/opt/rh/rh-maven35/root/usr/lib/python2.7/site-packages"
    XDG_DATA_DIRS: 
"/opt/rh/rh-maven35/root/usr/share:/usr/local/share:/usr/share"
  register: version

- debug:
    msg: '{{ version }}'

And the output reads as follows:

TASK [scl-test : debug] ********************************************************
ok: [sandbox55-adm.cines.fr] => {
    "msg": {
        "changed": true, 
        "cmd": [
            "/opt/rh/rh-maven35/root/usr/bin/mvn", 
            "--version"
        ], 
        "delta": "0:00:01.864600", 
        "end": "2019-10-15 12:15:03.549450", 
        "failed": false, 
        "rc": 0, 
        "start": "2019-10-15 12:15:01.684850", 
        "stderr": "", 
        "stderr_lines": [], 
        "stdout": "\u001b[1mApache Maven 3.5.0 (Red Hat 
3.5.0-4.3)\u001b[m\nMaven home: /opt/rh/rh-maven35/root/usr/share/maven\nJava 
version: 1.8.0_222, vendor: Oracle Corporation\nJava home: 
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.222.b10-1.el7_7.x86_64/jre\nDefault 
locale: fr_FR, platform encoding: UTF-8\nOS name: \"linux\", version: 
\"3.10.0-1062.1.1.el7.x86_64\", arch: \"amd64\", family: \"unix\"", 
        "stdout_lines": [
            "\u001b[1mApache Maven 3.5.0 (Red Hat 3.5.0-4.3)\u001b[m", 
            "Maven home: /opt/rh/rh-maven35/root/usr/share/maven", 
            "Java version: 1.8.0_222, vendor: Oracle Corporation", 
            "Java home: 
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.222.b10-1.el7_7.x86_64/jre", 
            "Default locale: fr_FR, platform encoding: UTF-8", 
            "OS name: \"linux\", version: \"3.10.0-1062.1.1.el7.x86_64\", arch: 
\"amd64\", family: \"unix\""
        ]
    }
}

Looks like I can run Maven 3.5 with the correct environment variables that way. 
The problem is that this workaround just doesn't scale, as we'd have to analyse 
the "enable" script coming with every SCL package. At first I thought I could 
just store the contents of that script in an Ansible variable and pipe it to 
some Ansible filters ( | to_yaml for example), hoping it would automagically 
turn my Bash variables into Ansible variables... 

https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html

I was obviously wrong...

Opinions are welcome :)

Cheers, Samuel

--

Samuel VISCAPI

+33(0)4 67 14 14 36
visc...@cines.fr
IM: sviscapi (Skype)

----- Mail original -----
De: "Petr Hracek" <phra...@redhat.com>
À: "viscapi" <visc...@cines.fr>
Cc: "sclorg" <sclorg@redhat.com>, "caux" <c...@cines.fr>
Envoyé: Lundi 14 Octobre 2019 10:36:53
Objet: Re: [scl.org] SCL and Ansible ?

Hi Samuel,

I have been writing a couple of ansible-playbooks but did not try it with
SCL.
You playbook w/o comments look good.

But I don't understand the scenario.
How do you run the ansible-playbook?
>From container or from shell?

Can you please give a reproducer steps, so I can analyze it?

Greetings
     Petr


pá 11. 10. 2019 v 11:23 odesílatel <visc...@cines.fr> napsal:

> Dear all,
>
> Silly question: is there a way to call "scl enable" from within an Ansible
> role ?
>
> So far we've been trying the command, shell and scripts modules, but to no
> avail...
>
>
> https://docs.ansible.com/ansible/latest/modules/command_module.html#command-module
>
> https://docs.ansible.com/ansible/latest/modules/shell_module.html#shell-module
>
> https://docs.ansible.com/ansible/latest/modules/script_module.html#script-module
>
> Here are some failed attempts:
>
> - name: Start using the software collection for maven
>   shell: scl_enabled rh-maven35
>   register: swap_exists
>   ignore_errors: true
> #script: test.sh
>  # shell: scl enable /etc/scl/conf//opt/rh/rh-maven35 bash && echo toto
>  #shell: /usr/bin/scl enable rh-maven35 bash
>  # args:
>  #   warn: yes
>  #   chdir: "{{ path_to_pastis }}"
>   #easy_install:
>   #  name: scl
> #  args:
> #    executable: "/usr/bin/scl enable rh-maven35 bash"
>  # command: |
>  #   /usr/bin/scl enable rh-maven35 bash
> #bash
>  # shell: |
>  #   scl enable rh-maven35 bash
> #bash
> #  args:
> #    executable: /bin/bash
>
> I think the root issue is that, as far as I understand, "scl enable"
> starts a new shell and sources environment variables in there, while
> Ansible is still waiting for some RC in the parent shell. Thus Ansible is
> not really failing, but just keeps on waiting for ever...
>
> Any help would be greatly appreciated.
>
> Best regards,
>
> Samuel from CINES
>
> https://www.cines.fr/en/
>
> --
>
> Samuel VISCAPI
>
> +33(0)4 67 14 14 36
> visc...@cines.fr
> IM: sviscapi (Skype)
>
> _______________________________________________
> SCLorg mailing list
> SCLorg@redhat.com
> https://www.redhat.com/mailman/listinfo/sclorg
>


-- 
Petr Hracek
email: phra...@redhat.com

_______________________________________________
SCLorg mailing list
SCLorg@redhat.com
https://www.redhat.com/mailman/listinfo/sclorg

Reply via email to