Hi,

I would like to share that i managed to collect inventory information with
only minor changes in ansible playbook.

sharing just to help other people who new learner like me.

    # write facts in inventory
    - name: write the inventory in into file
      copy:
        content: |
          MGMT_IP;HOSTNAME;MODEL;VERSION;IMAGE;
          {% for host in ansible_play_hosts %}
          {{ hostvars[host].inventory_hostname}};{{
hostvars[host].facts_output.ansible_facts.ansible_net_hostname }};{{
hostvars[host].facts_output.ansible_facts.ansible_net_model }};{{
hostvars[host].facts_output.ansible_facts.ansible_net_version }};{{
hostvars[host].facts_output.ansible_facts.ansible_net_image }}
          {% endfor %}

        dest: /etc/ansible/facts/systems.csv
        backup: yes

output will look like below after minor changes in excel.

MGMT_IP HOSTNAME MODEL VERSION IMAGE
1.1.1.1 R1 3725 (R7000) processor 12.4(15)T14 tftp://255.255.255.255/unknown
2.2.2.2 R2 3725 (R7000) processor 12.4(15)T14 tftp://255.255.255.255/unknown
3.3.3.3 R3 3725 (R7000) processor 12.4(15)T14 tftp://255.255.255.255/unknown
4.4.4.4 R4 3725 (R7000) processor 12.4(15)T14 tftp://255.255.255.255/unknown
5.5.5.5 router_r5 3725 (R7000) processor 12.4(15)T14 tftp://
255.255.255.255/unknown
6.6.6.6 R6 3725 (R7000) processor 12.4(15)T14 tftp://255.255.255.255/unknown
7.7.7.7 R7 3725 (R7000) processor 12.4(15)T14 tftp://255.255.255.255/unknown
8.8.8.8 router_r8 3725 (R7000) processor 12.4(15)T14 tftp://
255.255.255.255/unknown

Regards,
*Surjeet Singh*
Technical Specialist – Networks DATA
CCNA, CCNP(R&S)
Cell : +917838707047

To become bigger person,need to walk with bigger Vision !!!!

On Mon, Jan 29, 2018 at 10:16 AM, Surjeet Singh <[email protected]
> wrote:

> Thank you for your response.
>
> I also managed to fix this by modifying my code little bit
> .I will share my updated code with you..
>
> Regards/Surjeet
>
> On 29-Jan-2018 2:51 AM, "Claudia de Luna" <[email protected]> wrote:
>
>> Hi Surjeet,
>>
>> I have a script that is very similar to yours.  I pass it either a file
>> or a path to a directory full of individual files per device with all the
>> show command output.
>>
>> I take the output of each file and append it to a list, fsm_all_results.
>> Once done processing either one file or a directory full of files, i save
>> fsm_all_results to a CSV file.
>>
>> Hope this helps!
>>
>> Good luck.
>>
>> # Make sure we have files to process (at least 1)
>> if len(file_list) > 0:
>>
>>     # Open the CSV file to store results
>>     csv_results_fh = open_file(results_dir, 'wb')
>>     csv_writer = csv.writer(csv_results_fh, quoting=csv.QUOTE_MINIMAL)
>>
>>     # Iterate through the valid file list. If the script was passed a 
>> filename it will be a file_list of 1
>>     # If the script was passed a directory it will be a list of files with a 
>> valid extension
>>     for fil in file_list:
>>
>>         print("Processing device file: " + fil)
>>
>>         # open_file function returns a file handle
>>         fh = open_file(fil, 'r')
>>
>>         # Read the file contents into a variable for parsing
>>         file_contents = fh.read()
>>         # Close file
>>         fh.close()
>>
>>         # Send TextFSM Template name and data to parse to text_fsm_parsing 
>> function
>>         # file_results returns the parsed results and table returns the 
>> header
>>         fil_results, table = text_fsm_parse(textfsm_template, file_contents)
>>         print("file results of lenght {} from 
>> text_fsm_parse:\n{}".format(str(len(fil_results)),fil_results[1]))
>>
>>         # Append fil_results list of results to list of all results
>>         fsm_all_results.append(fil_results)
>>
>>         # Keep track of files without parser output in the no_output list so 
>> it can be printed later
>>         if len(fil_results) == 0:
>>             no_output.append(fil)
>>
>>
>>
>>     # Write the header row in the CSV file
>>     if table:
>>         csv_writer.writerow(table.header)
>>     else:
>>         sys.exit("Parsing Error. Execution aborted.")
>>
>>     # Write each row in the fsm_all_results list to the CSV file
>>     for re_row in fsm_all_results:
>>         for single_row in re_row:
>>             csv_writer.writerow(single_row)
>>             # print(single_row)
>>
>>
>>
>>
>>
>>
>>
>>
>> On Saturday, January 27, 2018 at 6:29:25 AM UTC-8, Surjeet Singh wrote:
>>>
>>> Hi Claudia,
>>>
>>> i am strugling with with issue in putting textfsm in loop. i can read
>>> all my file end with .txt but i have issue in moving for loop so i can run
>>> textfsml on all files instead of last file.
>>>
>>> can you please help me with that.
>>>
>>> import jtextfsm as textfsm
>>> import glob, os
>>>
>>> os.chdir("/etc/ansible/facts/")
>>> for file in glob.glob("*_iosfacts.txt"):
>>>     input_file = open(file)
>>>     raw_text_data = input_file.read()
>>>     input_file.close()
>>>
>>> # Run the text through the FSM.
>>> # The argument 'template' is a file handle and 'raw_text_data' is a
>>> # string with the content from the show_inventory.txt file
>>> template = open("/etc/ansible/parse-inventory-with-textfsm/show_invento
>>> ry_multiple.textfsm")
>>> re_table = textfsm.TextFSM(template)
>>> fsm_results = re_table.ParseText( raw_text_data)
>>>
>>> # the results are written to a CSV file
>>> outfile_name = open("/etc/ansible/parse-inven
>>> tory-with-textfsm//outfile.csv", "w+")
>>> outfile = outfile_name
>>>
>>> # Display result as CSV and write it to the output file
>>> # First the column headers...
>>> print(re_table.header)
>>> for s in re_table.header:
>>>     outfile.write("%s;" % s)
>>> outfile.write("\n")
>>>
>>> # ...now all row's which were parsed by TextFSM
>>> counter = 0
>>> for row in fsm_results:
>>>     print(row)
>>>     for s in row:
>>>         outfile.write("%s;" % s)
>>>     outfile.write("\n")
>>>     counter += 1
>>> print("Write %d records" % counter)
>>>
>>> Regards,
>>> *Surjeet Singh*
>>> Technical Specialist – Networks DATA
>>> CCNA, CCNP(R&S)
>>> Cell : +917838707047
>>>
>>> To become bigger person,need to walk with bigger Vision !!!!
>>>
>>> On Thu, Jan 25, 2018 at 12:27 AM, Claudia de Luna <[email protected]>
>>> wrote:
>>>
>>>> Hi Surjeet,
>>>>
>>>> There are a couple of ways to approach this.
>>>>
>>>> What I typically do is save a file of show commands for each device and
>>>> then process those files using TextFSM.
>>>>
>>>> - local_action: copy content="{{ output }}" dest="./FACTs/{{
>>>> inventory_hostname }}-facts.txt"
>>>>
>>>> To basically concatenate to one file I suspect it would have to involve
>>>> set_fact and some processing..maybe a template.
>>>>
>>>> If I get some time I'll see if I can come up with something that makes
>>>> sense.
>>>>
>>>> Claudia
>>>>
>>>>
>>>>
>>>> On Tue, Jan 23, 2018 at 10:51 PM, Surjeet Singh <[email protected]>
>>>> wrote:
>>>>
>>>>> Thank you for your response. Please excuse me for my multiple question
>>>>> i am new to this programming world.
>>>>>
>>>>> now i manage to collect the facts using the ansible get_fact module. i
>>>>> will further spend time today for regular expression.
>>>>>
>>>>> my playbook looks like below:
>>>>>
>>>>> ---
>>>>> - name: collect device facts and display OS version
>>>>>   hosts: "{{ inventory | default('all') }}"
>>>>>   gather_facts: false
>>>>>   connection: local
>>>>>   ignore_errors: yes
>>>>>
>>>>>   vars:
>>>>>     cli:
>>>>>       host: "{{ inventory_hostname }}"
>>>>>       username: cisco
>>>>>       password: cisco
>>>>>
>>>>>   tasks:
>>>>>     - ios_facts:
>>>>>       gather_subset: all
>>>>>       provider: "{{ cli }}"
>>>>>       register: facts_output
>>>>>
>>>>>     - debug: var=facts_output.ansible_facts.ansible_net_hostname
>>>>>     - debug: var=facts_output.ansible_facts.ansible_net_version
>>>>>     - debug: var=facts_output.ansible_facts.ansible_net_model
>>>>>
>>>>>     - name: write the inventory in into file
>>>>>       copy: content="{{ facts_output.ansible_facts.ansible_net_hostname,
>>>>> facts_output.ansible_facts.ansible_net_version ,
>>>>> facts_output.ansible_facts.ansible_net_model }}"
>>>>> dest="facts/iosfacts.txt"
>>>>>
>>>>> now my question is there any way to copy this information excel for
>>>>> all devices because currently i am getting information for only one
>>>>> device.since information is getting overwrite everytime instead of append.
>>>>>
>>>>> can we use loop to achieve above task ?
>>>>>
>>>>>
>>>>>
>>>>> Regards,
>>>>> *Surjeet Singh*
>>>>> Technical Specialist – Networks DATA
>>>>> CCNA, CCNP(R&S)
>>>>> Cell : +917838707047
>>>>>
>>>>> To become bigger person,need to walk with bigger Vision !!!!
>>>>>
>>>>> On Tue, Jan 23, 2018 at 9:20 PM, Claudia de Luna <[email protected]>
>>>>> wrote:
>>>>>
>>>>>> Hi Surjeet,
>>>>>>
>>>>>> My intent with the second message was to show you the power of the
>>>>>> ios/nxos facts modules.  These modules return device information in a
>>>>>> structured way so that you don't have to mine your output with regular
>>>>>> expressions if it returns the data you are looking for.  With the ios 
>>>>>> facts
>>>>>> module you get version, serial number, ip addresses (ipv4/6), hostname,
>>>>>> etc..
>>>>>>
>>>>>> If you take the output and paste it into http://jsoneditoronline.org/
>>>>>> you can "decompose" the ansible_facts object.   Here is the first part so
>>>>>> you can see that ansible_facts is a dictionary and the first key is
>>>>>> ansible_net_all_ipv4_addresses and the value is a list with two IPs (the
>>>>>> two IPv4 ips this switch has configured).  The next key would hold all 
>>>>>> the
>>>>>> IPv6 IPs in list but as you can see the list is empty [] because I don't
>>>>>> have ipv6 configured on this switch.
>>>>>>
>>>>>>>
>>>>>>>         "ansible_facts": {
>>>>>>>             "ansible_net_all_ipv4_addresses": [
>>>>>>>                 "10.1.10.25",
>>>>>>>                 "192.0.2.33"
>>>>>>>             ],
>>>>>>>             "ansible_net_all_ipv6_addresses": [],
>>>>>>>             "ansible_net_filesystems": [
>>>>>>>                 "flash:"
>>>>>>>             ],
>>>>>>>
>>>>>>
>>>>>> In this  playbook I use the ios_facts module to get the version of
>>>>>> code in the ansible_net_version key value pair that is part of the
>>>>>> ansible_facts "dictionary".
>>>>>>
>>>>>>   tasks:
>>>>>>>     - name: Gather IOS Facts
>>>>>>>       ios_facts:
>>>>>>
>>>>>>
>>>>>>
>>>>>> so the last line
>>>>>>
>>>>>> debug: var=facts_output.ansible_facts.ansible_net_version
>>>>>>
>>>>>>
>>>>>> is just printing the value of the ansible_net_version key from the
>>>>>> ansible_facts dictionary returned by the ios_facts module that I stuffed 
>>>>>> in
>>>>>> a varialbe called "facts_output"
>>>>>>
>>>>>> Having said all of that, there are many scenarios where you will need
>>>>>> to parse your output for data that has not been nicely packaged up for us
>>>>>> in these ansible modules so it is a valuable skill with many approaches.
>>>>>> You want to use the one you are most comfortable with but you also don't
>>>>>> want to work any harder than you have to!
>>>>>>
>>>>>> Here are some of the approaches I'm aware of and maybe others can
>>>>>> chime in with what works for them.
>>>>>>
>>>>>> *1.  embed regexp in the command you send with the ios_command
>>>>>> module.*  Here is sample output from the attached playbook.  I'm
>>>>>> just sending the regexp as part of the command as you would if you were 
>>>>>> in
>>>>>> the CLI.
>>>>>> Ethan Banks at Packet Pushers does a nice little summary
>>>>>> <http://packetpushers.net/rocking-your-show-commands-with-regex/>and
>>>>>> I'm sure you can Google a bunch more
>>>>>>
>>>>>> root@e8d7daa45b5b:/ansible/ansible2_4_base# ansible-playbook -i
>>>>>>> hosts get_ios_cmd_filter.yml
>>>>>>> PLAY [cisco] ******************************
>>>>>>> ************************************************************
>>>>>>> **************************************************************
>>>>>>> TASK [Show command with embedded regexp inc connected for all
>>>>>>> Conneced interfaces] ******************************
>>>>>>> ****************************************************
>>>>>>> ok: [arctic-3650] => (item=show int status | inc connected)
>>>>>>> TASK [debug] ******************************
>>>>>>> ************************************************************
>>>>>>> **************************************************************
>>>>>>> ok: [arctic-3650] => {
>>>>>>>     "output.results[0].stdout_lines": [
>>>>>>>         [
>>>>>>>             "Gi1/0/4                      connected    1
>>>>>>> a-full a-1000 10/100/1000BaseTX"
>>>>>>>         ]
>>>>>>>     ]
>>>>>>> }
>>>>>>> TASK [Show command with embedded regexp for all IPs]
>>>>>>> ************************************************************
>>>>>>> ****************************************************
>>>>>>> ok: [arctic-3650] => (item=show ip interface brief | inc \.[0-9]+[
>>>>>>> ]+YES)
>>>>>>> TASK [debug] ******************************
>>>>>>> ************************************************************
>>>>>>> **************************************************************
>>>>>>> ok: [arctic-3650] => {
>>>>>>>     "output.results[0].stdout_lines": [
>>>>>>>         [
>>>>>>>             "Vlan1                  192.0.2.33      YES manual up
>>>>>>>                 up      ",
>>>>>>>             "GigabitEthernet0/0     10.1.10.25      YES DHCP   up
>>>>>>>                 up"
>>>>>>>         ]
>>>>>>>     ]
>>>>>>> }
>>>>>>> PLAY RECAP ******************************
>>>>>>> ************************************************************
>>>>>>> ****************************************************************
>>>>>>> arctic-3650                : ok=4    changed=0    unreachable=0
>>>>>>> failed=0
>>>>>>
>>>>>>
>>>>>> 2.  Use the newish jinja2 filters regex_findall and regex_search
>>>>>>
>>>>>> Ivan Pepelnjak has a nice summary of 1 and 2 here.
>>>>>> <http://automation.ipspace.net/Example:Parsing_Text_Printouts_within_Ansible_Playbooks>
>>>>>>
>>>>>> 3.  Look at the textfsm modules and filters
>>>>>>
>>>>>> 4.  look at napalm getters which return data for a variety of network
>>>>>> hardware in a structured way so that you can abstract out your actions in
>>>>>> your playbooks across many device types.
>>>>>>
>>>>>> Kirk Byer has a very good Ansible series and he covers jinja filters
>>>>>> and using the textfsm parsing modules.  That is my favorite and I've 
>>>>>> moved
>>>>>> most of my parsing scripts to TextFSM these days.  Check out the ntc
>>>>>> modules from Network to Code (Jason Edelman).
>>>>>>
>>>>>> http://docs.networktocode.com/en/latest/ntc-ansible%20Module
>>>>>> s%20(multi-vendor)/modules_list.html
>>>>>>
>>>>>> You can use the jinja2 based filters to do all kinds of things in
>>>>>> Ansible but they make my head hurt!  (which means I don't understand them
>>>>>> well enough yet) :D
>>>>>>
>>>>>> Good Luck!
>>>>>>
>>>>>> Claudia
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Mon, Jan 22, 2018 at 8:52 PM, Surjeet Singh <[email protected]
>>>>>> > wrote:
>>>>>>
>>>>>>> Hi Claudia de Luna,
>>>>>>>
>>>>>>> thank you for your response.
>>>>>>>
>>>>>>> *following your **instruction i tried to collect the host name
>>>>>>> using **regular **expression used by peter and i can collect ios
>>>>>>> version.*
>>>>>>>
>>>>>>> *another question is triggered here after looking on your playbook*
>>>>>>> *:-*
>>>>>>>
>>>>>>> register: facts_output
>>>>>>>
>>>>>>>
>>>>>>>     - debug: var=facts_output
>>>>>>>     - debug: var=facts_output.ansible_facts.ansible_net_version
>>>>>>>
>>>>>>> question is regarding last line here, in your last line you add
>>>>>>> ansible_facts, can you please let me know what is purpose of this and 
>>>>>>> where
>>>>>>> it came. rest i know about ansible_net_version.
>>>>>>>
>>>>>>> also can you please refer me any document how to use regular
>>>>>>> expression ansible playbook.i have used these in python so i have small
>>>>>>> understanding in python.
>>>>>>>
>>>>>>> Regards,
>>>>>>> *Surjeet Singh*
>>>>>>> Technical Specialist – Networks DATA
>>>>>>> CCNA, CCNP(R&S)
>>>>>>> Cell : +917838707047
>>>>>>>
>>>>>>> To become bigger person,need to walk with bigger Vision !!!!
>>>>>>>
>>>>>>> On Sun, Jan 21, 2018 at 11:59 PM, Claudia de Luna <[email protected]>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> Using Ansible ios_facts module
>>>>>>>>
>>>>>>>> Here is a simple playbook to gather ios facts.
>>>>>>>>
>>>>>>>> I took the output and pasted it into one of the may JSON
>>>>>>>> lint/editors on line to easily see the structure and then added a debug
>>>>>>>> statement for the key:value pair I wanted.  Version in this case.
>>>>>>>>
>>>>>>>>
>>>>>>>> ---
>>>>>>>> - hosts: cisco
>>>>>>>>   connection: local
>>>>>>>>   gather_facts: False
>>>>>>>>   ignore_errors: yes
>>>>>>>>
>>>>>>>>
>>>>>>>>   vars:
>>>>>>>>     cli:
>>>>>>>>         host: "{{ host }}"
>>>>>>>>         username: "{{ username }}"
>>>>>>>>         password: "{{ password }}"
>>>>>>>>
>>>>>>>>
>>>>>>>>   tasks:
>>>>>>>>     - name: Gather NX-OS Facts
>>>>>>>>       ios_facts:
>>>>>>>>         provider: "{{ cli }}"
>>>>>>>>
>>>>>>>>
>>>>>>>>       register: facts_output
>>>>>>>>
>>>>>>>>
>>>>>>>>     - debug: var=facts_output
>>>>>>>>     - debug: var=facts_output.ansible_facts.ansible_net_version
>>>>>>>>
>>>>>>>>
>>>>>>>>     - local_action: copy content="{{ facts_output }}" dest="./{{
>>>>>>>> inventory_hostname }}.txt"
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> TASK [debug] ******************************
>>>>>>>> ************************************************************
>>>>>>>> **************************************************************
>>>>>>>> ok: [arctic-3650] => {
>>>>>>>>     "facts_output.ansible_facts.ansible_net_version": "03.06.06E"
>>>>>>>> }
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On Saturday, January 20, 2018 at 8:57:38 AM UTC-8, Surjeet Singh
>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>> Hi Peter,
>>>>>>>>>
>>>>>>>>> I am facing another issue with same i am trying to debug version
>>>>>>>>> only from the results of show version using below method but it gives 
>>>>>>>>> me
>>>>>>>>> variable error. however when i run playbook -vvv i can see the show 
>>>>>>>>> version
>>>>>>>>> command is excuted and they are mapped to stdout and stdout_lines as 
>>>>>>>>> you
>>>>>>>>> mention in document. can you please help me with that or redirect me
>>>>>>>>> towards of link.
>>>>>>>>>
>>>>>>>>>       register: version
>>>>>>>>>     - debug: var = version.stdout[0].Version
>>>>>>>>>
>>>>>>>>> Regards/surjeet
>>>>>>>>>
>>>>>>>>> On Saturday, September 3, 2016 at 8:58:39 AM UTC+5:30, Peter
>>>>>>>>> Sprygada wrote:
>>>>>>>>>>
>>>>>>>>>> Hi Valerie,
>>>>>>>>>>
>>>>>>>>>> Since network devices such as IOS do not provide a shell
>>>>>>>>>> environment nor the ability to download and run arbitrary 
>>>>>>>>>> executables, we
>>>>>>>>>> are fairly constrained from using the current connection plugin 
>>>>>>>>>> module
>>>>>>>>>> implemented in core.  So in order to build modules that work with 
>>>>>>>>>> network
>>>>>>>>>> devices, we build an integration that effectively treats SSH or more
>>>>>>>>>> appropriately said, CLI over SSH like an API.  During module 
>>>>>>>>>> execute, we
>>>>>>>>>> build an SSH session to the remote device for the purposes of 
>>>>>>>>>> sending and
>>>>>>>>>> receiving commands and output.  That is way we must specify
>>>>>>>>>> connection=local.
>>>>>>>>>>
>>>>>>>>>> Peter
>>>>>>>>>>
>>>>>>>>>> On Fri, Sep 2, 2016 at 7:55 AM, Valérie P <[email protected]>
>>>>>>>>>> wrote:
>>>>>>>>>>
>>>>>>>>>>> Hello John,
>>>>>>>>>>>
>>>>>>>>>>> I've had a little bit of trouble with the ios_* modules and
>>>>>>>>>>> thanks to the source found in this sample it is now functional, 
>>>>>>>>>>> anyhow I do
>>>>>>>>>>> not understand every line of it, and particularly the "connection: 
>>>>>>>>>>> local"
>>>>>>>>>>> one. What is it used for? The ansible documentation refer to the
>>>>>>>>>>> connection: local as a way to make the playbook play locally.
>>>>>>>>>>>
>>>>>>>>>>> "It may be useful to use a playbook locally, rather than by
>>>>>>>>>>> connecting over SSH. This can be useful for assuring the 
>>>>>>>>>>> configuration of a
>>>>>>>>>>> system by putting a playbook in a crontab. This may also be used to 
>>>>>>>>>>> run a
>>>>>>>>>>> playbook inside an OS installer, such as an Anaconda kickstart.
>>>>>>>>>>>
>>>>>>>>>>> To run an entire playbook locally, just set the “hosts:” line to
>>>>>>>>>>> “hosts: 127.0.0.1” and then run the playbook like so:
>>>>>>>>>>>
>>>>>>>>>>> ansible-playbook playbook.yml --connection=local
>>>>>>>>>>>
>>>>>>>>>>> Alternatively, a local connection can be used in a single
>>>>>>>>>>> playbook play, even if other plays in the playbook use the default 
>>>>>>>>>>> remote
>>>>>>>>>>> connection type:
>>>>>>>>>>>
>>>>>>>>>>> - hosts: 127.0.0.1
>>>>>>>>>>>   connection: local
>>>>>>>>>>>
>>>>>>>>>>> "
>>>>>>>>>>> Why is the connection: local parameters a must for it to work?
>>>>>>>>>>>
>>>>>>>>>>> Thanks in advance!
>>>>>>>>>>> Valerie
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Le mercredi 24 août 2016 09:20:15 UTC+2, John Barker a écrit :
>>>>>>>>>>>>
>>>>>>>>>>>> I've added a comment with the the corrected playbook sample
>>>>>>>>>>>>
>>>>>>>>>>>> https://gist.github.com/privateip/11b042e569585ee9248a
>>>>>>>>>>>>
>>>>>>>>>>>> Regards,
>>>>>>>>>>>> John Barker
>>>>>>>>>>>>
>>>>>>>>>>>> On Wednesday, 10 August 2016 15:32:23 UTC+1, Bharath Bharadwaj
>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>> Hi All,
>>>>>>>>>>>>>
>>>>>>>>>>>>> I'm new to Ansible and yml, my goal is to automate a part of
>>>>>>>>>>>>> network operation, I just want to start with a very simple 
>>>>>>>>>>>>> output, copied
>>>>>>>>>>>>> below is my playbook, I'm trying to run a show version, but i'm 
>>>>>>>>>>>>> getting
>>>>>>>>>>>>> error when executing the output, yet when i try the same yml 
>>>>>>>>>>>>> script through
>>>>>>>>>>>>> yml validator, there is no errors.
>>>>>>>>>>>>>
>>>>>>>>>>>>> My Playbook
>>>>>>>>>>>>>
>>>>>>>>>>>>> vars:
>>>>>>>>>>>>>     cli:
>>>>>>>>>>>>>     host: "{{ network }}"
>>>>>>>>>>>>>     username: admin
>>>>>>>>>>>>>     password: test@123
>>>>>>>>>>>>>     transport: cli
>>>>>>>>>>>>>
>>>>>>>>>>>>> tasks:
>>>>>>>>>>>>> - name: run multiple commands on remote nodes
>>>>>>>>>>>>>   ios_command:
>>>>>>>>>>>>>   - commands: show version
>>>>>>>>>>>>>   - provider: "{{ cli }}"
>>>>>>>>>>>>>   - transport: cli
>>>>>>>>>>>>>
>>>>>>>>>>>>> Error:
>>>>>>>>>>>>> "ERROR! playbooks must be a list of plays
>>>>>>>>>>>>>
>>>>>>>>>>>>> The error appears to have been in
>>>>>>>>>>>>> '/etc/ansible/playbooks/cisco_ios.yml': line 1, column 1, but
>>>>>>>>>>>>> may
>>>>>>>>>>>>> be elsewhere in the file depending on the exact syntax problem.
>>>>>>>>>>>>>
>>>>>>>>>>>>> The offending line appears to be:
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> vars:
>>>>>>>>>>>>> ^ here"
>>>>>>>>>>>>>
>>>>>>>>>>>> --
>>>>>>>>>>> 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/6383da04-b
>>>>>>>>>>> 68b-4a33-85e9-87318eb0a5b8%40googlegroups.com
>>>>>>>>>>> <https://groups.google.com/d/msgid/ansible-project/6383da04-b68b-4a33-85e9-87318eb0a5b8%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 a topic in
>>>>>>>> the Google Groups "Ansible Project" group.
>>>>>>>> To unsubscribe from this topic, visit
>>>>>>>> https://groups.google.com/d/topic/ansible-project/Ul5D-gAzRr
>>>>>>>> g/unsubscribe.
>>>>>>>> To unsubscribe from this group and all its topics, 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/826a69bb-d
>>>>>>>> 730-48f6-a7ce-103808c1f0f0%40googlegroups.com
>>>>>>>> <https://groups.google.com/d/msgid/ansible-project/826a69bb-d730-48f6-a7ce-103808c1f0f0%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 a topic in
>>>>>>> the Google Groups "Ansible Project" group.
>>>>>>> To unsubscribe from this topic, visit https://groups.google.com/d/to
>>>>>>> pic/ansible-project/Ul5D-gAzRrg/unsubscribe.
>>>>>>> To unsubscribe from this group and all its topics, 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%2BpLPDT
>>>>>>> aTE0o3NWOp00je5ZiRTMveL4z3MTTPuiU6%2Bemv6v6%3DQ%40mail.gmail.com
>>>>>>> <https://groups.google.com/d/msgid/ansible-project/CA%2BpLPDTaTE0o3NWOp00je5ZiRTMveL4z3MTTPuiU6%2Bemv6v6%3DQ%40mail.gmail.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 a topic in
>>>>>> the Google Groups "Ansible Project" group.
>>>>>> To unsubscribe from this topic, visit https://groups.google.com/d/to
>>>>>> pic/ansible-project/Ul5D-gAzRrg/unsubscribe.
>>>>>> To unsubscribe from this group and all its topics, 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/CAENRZgbhS
>>>>>> %2Bu3PBLns78nBHo-C86p%2BoVQoWS96czJGfT80PJBbA%40mail.gmail.com
>>>>>> <https://groups.google.com/d/msgid/ansible-project/CAENRZgbhS%2Bu3PBLns78nBHo-C86p%2BoVQoWS96czJGfT80PJBbA%40mail.gmail.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 a topic in the
>>>>> Google Groups "Ansible Project" group.
>>>>> To unsubscribe from this topic, visit https://groups.google.com/d/to
>>>>> pic/ansible-project/Ul5D-gAzRrg/unsubscribe.
>>>>> To unsubscribe from this group and all its topics, 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%2BpLPDR
>>>>> cKXtd_CZHJxu%3D8VPMu91iTaZgpZPV58ctan-He81nTw%40mail.gmail.com
>>>>> <https://groups.google.com/d/msgid/ansible-project/CA%2BpLPDRcKXtd_CZHJxu%3D8VPMu91iTaZgpZPV58ctan-He81nTw%40mail.gmail.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 a topic in the
>>>> Google Groups "Ansible Project" group.
>>>> To unsubscribe from this topic, visit https://groups.google.com/d/to
>>>> pic/ansible-project/Ul5D-gAzRrg/unsubscribe.
>>>> To unsubscribe from this group and all its topics, 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/ms
>>>> gid/ansible-project/CAENRZgbiyZR5mz9%2BLZsHHSykXK%2Bh_g_ggim
>>>> m2%2BxZHurGYONgkg%40mail.gmail.com
>>>> <https://groups.google.com/d/msgid/ansible-project/CAENRZgbiyZR5mz9%2BLZsHHSykXK%2Bh_g_ggimm2%2BxZHurGYONgkg%40mail.gmail.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 a topic in the
>> Google Groups "Ansible Project" group.
>> To unsubscribe from this topic, visit https://groups.google.com/d/to
>> pic/ansible-project/Ul5D-gAzRrg/unsubscribe.
>> To unsubscribe from this group and all its topics, 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/ms
>> gid/ansible-project/77eca948-46c4-4acf-ba10-d46420a39317%
>> 40googlegroups.com
>> <https://groups.google.com/d/msgid/ansible-project/77eca948-46c4-4acf-ba10-d46420a39317%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%2BpLPDRj3RSWJTt7uaLaO4uOZHXEN-2ZUtaG5Cwy1sfgd6k2sQ%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to