I actually got this to work by change key variable to:
1. key: "{{ hostvars[groups['swarm-init'][0]]['worker'] | replace('[u',
'') | replace(']', '')}}"
What a pia! Surely i am doing something early in the play that is causing
me to have to replace those characters.
On Sunday, August 7, 2016 at 3:31:01 PM UTC-5, Tony Owens wrote:
>
> Thanks for the tip. I am much closer but I'm getting some undesirable
> characters added to the var named "key" I'm setting.
>
>
> 1. - hosts: swarm-init
> 2. tasks:
> 3. - shell: docker swarm init
> 4. - shell: docker swarm join-token -q manager
> 5. register: manager
> 6. - set_fact:
> 7. manager: "{{ manager.stdout_lines }}"
> 8. - shell: docker swarm join-token -q worker
> 9. register: worker
> 10. - set_fact:
> 11. worker: "{{ worker.stdout_lines }}"
> 12. - hosts: swarm-worker
> 13. vars:
> 14. key: "{{ hostvars[groups['swarm-init'][0]]['worker'] }}"
> 15. tasks:
> 16. - shell: "docker swarm join --token {{ key }} {{ swarmmanager
> }}:2377"
>
>
> Inventory
>
> 1. [swarm-init]
> 2. myhost1
> 3.
> 4. [swarm-manager]
> 5. myhost1
> 6.
> 7. [swarm-worker]
> 8. myhost2
> 9.
> 10. [swarm-manager:vars]
> 11. swarmmanager=myhost1
> 12.
> 13. [swarm-worker:vars]
> 14. swarmmanager=myhost1
>
>
> The output:
>
> PLAY
> ***************************************************************************
>
> TASK [setup]
> *******************************************************************
> ok: [myhost1]
>
> TASK [command]
> *****************************************************************
> changed: [myhost1]
>
> TASK [command]
> *****************************************************************
>
> changed: [myhost1]
>
> TASK [set_fact]
> ****************************************************************
> ok: [myhost1]
>
> TASK [command]
> *****************************************************************
> changed: [myhost1]
>
> TASK [set_fact]
> ****************************************************************
> ok: [myhost1]
>
> PLAY
> ***************************************************************************
>
> TASK [setup]
> *******************************************************************
>
> ok: [myhost2]
>
> TASK [command]
> *****************************************************************
> fatal: [myhost2]: FAILED! => {"changed": true, "cmd": "docker swarm join
> --token
> [u'SWMTKN-1-0lanrq32u7f1v47noxftd1ekpzgipo3noufg7ppox3aooqhmqh-3peerw7aalzg8ko13zrqh6hee']
> myhost1:2377", "delta": "0:00:00.036979", "end": "2016-08-07
> 20:20:16.500147", "failed": true, "rc": 1, "start": "2016-08-07
> 20:20:16.463168", "stderr": "Error response from daemon: invalid join token",
> "stdout": "", "stdout_lines": [], "warnings": []}
>
>
> PLAY RECAP
> *********************************************************************
> myhost1 : ok=6 changed=3 unreachable=0 failed=0
> myhost2 : ok=1 changed=0 unreachable=0 failed=1
>
> FATAL: command execution failedhudson.AbortException
> <http://stacktrace.jenkins-ci.org/search?query=hudson.AbortException>:
> Ansible playbook execution failed
> at
> org.jenkinsci.plugins.ansible.AnsiblePlaybookBuilder.perform(AnsiblePlaybookBuilder.java:218)
>
> <http://stacktrace.jenkins-ci.org/search/?query=org.jenkinsci.plugins.ansible.AnsiblePlaybookBuilder.perform&entity=method>
> at
> org.jenkinsci.plugins.ansible.AnsiblePlaybookBuilder.perform(AnsiblePlaybookBuilder.java:192)
>
> <http://stacktrace.jenkins-ci.org/search/?query=org.jenkinsci.plugins.ansible.AnsiblePlaybookBuilder.perform&entity=method>
> at
> hudson.tasks.BuildStepCompatibilityLayer.perform(BuildStepCompatibilityLayer.java:78)
>
> <http://stacktrace.jenkins-ci.org/search/?query=hudson.tasks.BuildStepCompatibilityLayer.perform&entity=method>
> at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20)
> <http://stacktrace.jenkins-ci.org/search/?query=hudson.tasks.BuildStepMonitor$1.perform&entity=method>
> at
> hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:779)
>
> <http://stacktrace.jenkins-ci.org/search/?query=hudson.model.AbstractBuild$AbstractBuildExecution.perform&entity=method>
> at hudson.model.Build$BuildExecution.build(Build.java:205)
> <http://stacktrace.jenkins-ci.org/search/?query=hudson.model.Build$BuildExecution.build&entity=method>
> at hudson.model.Build$BuildExecution.doRun(Build.java:162)
> <http://stacktrace.jenkins-ci.org/search/?query=hudson.model.Build$BuildExecution.doRun&entity=method>
> at
> hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:534)
> <http://stacktrace.jenkins-ci.org/search/?query=hudson.model.AbstractBuild$AbstractBuildExecution.run&entity=method>
> at hudson.model.Run.execute(Run.java:1741)
> <http://stacktrace.jenkins-ci.org/search/?query=hudson.model.Run.execute&entity=method>
> at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
> <http://stacktrace.jenkins-ci.org/search/?query=hudson.model.FreeStyleBuild.run&entity=method>
> at hudson.model.ResourceController.execute(ResourceController.java:98)
> <http://stacktrace.jenkins-ci.org/search/?query=hudson.model.ResourceController.execute&entity=method>
> at hudson.model.Executor.run(Executor.java:410)
> <http://stacktrace.jenkins-ci.org/search/?query=hudson.model.Executor.run&entity=method>
> ERROR: Ansible playbook execution failed
> Notifying upstream projects of job completion
> Finished: FAILURE
>
>
> On Saturday, August 6, 2016 at 11:23:17 PM UTC-5, Stephen Granger wrote:
>>
>> http://docs.ansible.com/ansible/set_fact_module.html
>>
>> - name: set fact from hosts output
>> set_fact:
>> docker_manager: manager.stdout
>> docker_worker: worker.stdout
>>
>> # you may want to just pick out a line too, see the debug for what you
>> may want
>>
>> - debug:
>> var:
>> - worker.stdout_lines
>> - manager.stdout_lines
>>
>> On 6 August 2016 at 08:15, Tony Owens <[email protected]> wrote:
>>
>>> I'm looking for some tips on the best way to store a variable
>>> persistently across all hosts or multiple plays.
>>>
>>> I am attempting to create a docker swarm manager using something similar
>>> to this:
>>>
>>>
>>> 1. - hosts: swarm-init
>>> 2. gather_facts: no
>>> 3. tasks:
>>> 4. - shell: docker swarm init
>>> 5. - shell: docker swarm join-token -q manager
>>> 6. register: manager
>>> 7. - shell: docker swarm join-token -q worker
>>> 8. register: worker
>>>
>>>
>>> I would run this play once and don't have that logic built yet but I
>>> have not been able to find a method of storing {{ worker }} in a variable
>>> so that I could join the swarm from another host in another play. Any
>>> advice?
>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "Ansible Project" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to [email protected].
>>> To post to this group, send email to [email protected].
>>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/ansible-project/43c19f78-9572-4af2-8e52-784878805bcc%40googlegroups.com
>>>
>>> <https://groups.google.com/d/msgid/ansible-project/43c19f78-9572-4af2-8e52-784878805bcc%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>
>>
>>
>> --
>> Steve
>>
>
--
You received this message because you are subscribed to the Google Groups
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/ansible-project/218b97b7-f724-4c4d-8a6b-ed9043aa3c4b%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.