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]>
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].
> 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/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/CA%2BnsWgwUf%2B6SSrabbnnqxkn52PmU3sBH5SZxQqbZ6NXdcqAQKA%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to