I just need to write some values into a file in a specified format, so that 
I don't have to individually access each VM and make changes to the file. 
The rest of what happens is not ansible's concern. All I would like to know 
is how can I run a task in a power of 2 loop (when the loop value is 
entered by the user) and save some values in a register , values which can 
be permanently stored in some array and be accessed in any iteration (Tasks 
run multiple times on each individual VM due to *serial: 1* constraint)

On Wednesday, August 20, 2014 6:03:41 AM UTC-7, Michael DeHaan wrote:
>
> Sounds like this is more of a question about asking ansible to do "static" 
> DHCP reservations for you, and reserve a MAC for a future host.
>
> Ansible's not really a programming language.  Can you just use DHCP 
> dynamic ranges?  I'm not following the "send to vm" parts and why you would 
> need
> to set that up there.
>
> If you are attempting to manage a large number of static IPs and auto-set 
> up the networking configurations for a bare metal environment, something 
> like Cobbler can be a good fit.
>
>
>
>
>
>
> On Wed, Aug 20, 2014 at 8:55 AM, Imran Khan <[email protected] 
> <javascript:>> wrote:
>
>> #$ cat bbb.yml
>> ---
>> - hosts: localhost
>>   gather_facts: False
>>
>>   vars_prompt:
>>     - name: epcrange
>>       prompt: Enter the number of EPCs that you want to configure
>>       private: False
>>       default: "1"
>>     - name: serverrange
>>       prompt: Enter the number of Cleints that you want to configure
>>       private: False
>>       defualt: "1"
>>
>>   pre_tasks:
>>     - name: Set EPC node id variables
>>       set_fact:
>>        # start: "{{ epcrange.split('..')[0] }}"
>>       # stop: "{{ serverrange.split('..')[-1] }}"
>>         start: 1
>>         stop: "{{epcrange}}"
>>     - name: "Add EPC hosts:"
>>       add_host: name="vm{{item}}" groups=just_created_epcs
>>       with_sequence: "start={{start}} end={{stop}} "
>>     - name: Set Client node id variable
>>       set_fact:
>>         start: 1
>>         stop: "{{serverrange}}"
>>     - name: "Add Client hosts:"
>>       add_host: name="vm{{item}}" groups=just_created_clients
>>       with_sequence: "start={{start}} end={{stop}} "
>>
>>
>>
>> - hosts: just_created_epcs
>>   serial: 1
>>   gather_facts: False
>>   tasks:
>>
>>   serial: 1
>>   gather_facts: False
>>
>>   vars_prompt:
>>     - name: ServerIP
>>       prompt: Enter the ServerIP to replace
>>       private: False
>>       default: '11.11.4.10'
>>
>>     - name: ServerIPRange
>>       prompt: Enter the ServerIP range
>>       private: False
>>       default: '128'
>>
>>   vars:
>>     - String1: '"ServerIP"'
>>     - String2: '"ServerIPRange"'
>>
>> #
>> #
>>     - name: Replace ServerIP in config_file
>>       shell: cd /home/imran/Desktop/tobefetched; sed -i '/{{String1}}/ c 
>> "ServerIP" ':' "{{ServerIP}}" ' config_file
>>       when: inventory_hostname == "vm1"  # workaround, run_once won't 
>> work
>>       ignore_errors: yes
>>
>>
>>     - name: Replace ServerIPRange in config_file
>>       shell: cd /home/imran/Desktop/tobefetched; sed -i '/{{String2}}/ c 
>> "ServerIPRange" ':' "{{ServerIPRange}}" ' config_file
>>       when: inventory_hostname == "vm1"    # workaround, run_once won't 
>> work
>>       ignore_errors: yes
>>
>> #The first time ,the address that the user enters is copied onto 
>> config_file on remote server as is
>> #Now I need to do some mathematics here and so that I can write a value 
>> into the config_file of the remote machine based on my calculations here.
>> #Something like: The next VM(s) gets values written into the config_file 
>> according to some formula (explained in c++ below)
>>
>> int x=0;
>> for (int i=1; i<epcrange; i+=pow(2,x))                                   
>>                                 //pow is a math function with pow(2,x)= 2^x
>> {
>> New_LastIPOctet = Last_ServerIPOctet +ServerIPRange/epcrange;           
>> //user always enters values in the power of 2, Last_ServerIPOctet is 
>> accessed from the IP that the user enters
>> NewIP=append (ServerIP, New_LastIPOctet);                                 
>>                  //some function that appends a new value to the last IPV4 
>> octet of a previous IPV4 address.
>> SendToFileOnRemoteVM = send ();                                           
>>                        //send to my remote vm and make changes to 
>> config_file
>> x++;
>> }
>> //all values are integers
>>
>> As we can see here, epc range is decided by the user, so the loop is not 
>> hard-coded.
>> I am sorry for using c++ and jumbling it all up, but there is no easy way 
>> to explain this
>>
>>
>>
>> On Wednesday, August 20, 2014 5:16:36 AM UTC-7, Michael DeHaan wrote:
>>
>>> I'm perhaps not understanding the underlying question, but:
>>>
>>> {{ an_array | length }}
>>>
>>> will tell you the length of an array in Jinja2
>>>
>>>
>>>
>>>
>>> On Wed, Aug 20, 2014 at 8:11 AM, Imran Khan <[email protected]> 
>>> wrote:
>>>
>>>> Thanks, but to use this I will need to know how many times this task 
>>>> will run. That is, in-fact, decided by the person running the playbook, at 
>>>> run time
>>>>
>>>>
>>>> On Wednesday, August 20, 2014 5:01:56 AM UTC-7, Michael DeHaan wrote:
>>>>
>>>>> This is easy to experiment with, by constructing a simple playbook:
>>>>>
>>>>> - shell: echo {{ foo }}
>>>>>   with_items: [1,2,3,4,5]
>>>>>   register: result
>>>>>
>>>>> - debug: var=result
>>>>>
>>>>> You will see that the result variable does get registered as an array.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> On Wed, Aug 20, 2014 at 7:53 AM, Imran Khan <[email protected]> 
>>>>> wrote:
>>>>>
>>>>>> What I need is a register array!
>>>>>>
>>>>>>
>>>>>> On Wednesday, August 20, 2014 4:48:17 AM UTC-7, Imran Khan wrote:
>>>>>>
>>>>>>> I would like to know that If I run a task in a loop and save the 
>>>>>>> value in a register, how can I save the values so that I have them 
>>>>>>> accessible when I need them
>>>>>>> P.S: I am running my playbook using *serial: 1 .* So, when I 
>>>>>>> iterate a task, say 5 times, it should save them all seperately, so 
>>>>>>> that 
>>>>>>> when the playbook runs serially the second or third time around, I can 
>>>>>>> use 
>>>>>>> the registered values as needed. 
>>>>>>> Example:
>>>>>>>
>>>>>>> - hosts: just_created_clients
>>>>>>>   serial: 1
>>>>>>>   gather_facts: False
>>>>>>>  
>>>>>>> #
>>>>>>> #
>>>>>>>   tasks:
>>>>>>> #
>>>>>>> #
>>>>>>>     - name: Check if the changes to config_file were successful
>>>>>>>       shell: cat /home/imran/Desktop/tobefetched/config_file
>>>>>>>       with_sequence: count=5      
>>>>>>>        register: my_content
>>>>>>>       ignore_errors: yes
>>>>>>> #
>>>>>>> #
>>>>>>>
>>>>>>>
>>>>>>> Now, how do I access the values in the register(s) ? Note: I will 
>>>>>>> not be immediately using these values, so can't have a task immediately 
>>>>>>> following this task, which uses the results of this register 
>>>>>>> sequentially. 
>>>>>>> What I need is a register array!
>>>>>>>
>>>>>>  -- 
>>>>>> 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/abdb1d0d-05e1-4c1a-ba4e-f63a56ca56b0%
>>>>>> 40googlegroups.com 
>>>>>> <https://groups.google.com/d/msgid/ansible-project/abdb1d0d-05e1-4c1a-ba4e-f63a56ca56b0%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>>> .
>>>>>>
>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>
>>>>>
>>>>>  -- 
>>>> 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/06e4b287-486b-480a-8c4e-
>>>> 3f26c2c8d145%40googlegroups.com 
>>>> <https://groups.google.com/d/msgid/ansible-project/06e4b287-486b-480a-8c4e-3f26c2c8d145%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>> .
>>>>
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>
>>>  -- 
>> 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] <javascript:>.
>> To post to this group, send email to [email protected] 
>> <javascript:>.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/ansible-project/2cb93c6a-e413-49c4-8769-1f2394df444f%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/ansible-project/2cb93c6a-e413-49c4-8769-1f2394df444f%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>

-- 
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/a18d1409-7df9-4281-afe0-0027fc7bf2ad%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to