{"action":"created","comment":{"url":"https://api.github.com/repos/ansible/ansible/pulls/comments/180792470","pull_request_review_id":111276518,"id":180792470,"diff_hunk":"@@ -0,0 +1,76 @@\n+.. _network_faq:\n+\n+*******************\n+Ansible Network FAQ\n+*******************\n+\n+.. contents:: Topics\n+\n+.. _network_faq_performance:\n+\n+How can I improve performance for network playbooks?\n+====================================================\n+\n+.. _network_faq_strategy_free:\n+\n+Consider ``strategy: free`` if you are running on multiple hosts\n+---------------------------------------------------------------------------------\n+\n+The ``strategy`` plugin tells Ansible how to order multiple tasks on multiple hosts. :ref:`Strategy<strategy_plugins>` is set at the playbook level.\n+\n+The default strategy is ``linear``. With strategy set to ``linear``, Ansible waits until the current task has run on all hosts before starting the next task on any host. Ansible may have forks free, but will not use them until all hosts have completed the current task. If each task in your playbook must succeed on all hosts before you run the next task, use the ``linear`` strategy.\n+\n+Using the ``free`` strategy, Ansible uses available forks to execute tasks on each host as quickly as possible. Even if an earlier task is still running on one host, Ansible executes later tasks on other hosts. The ``free`` strategy uses available forks more efficiently. If your playbook stalls on each task, waiting for one slow host, consider using ``strategy: free`` to boost overall performance. \n+\n+.. _network_faq_limit_show_running:\n+\n+Execute ``show running`` only if you absolutely must\n+---------------------------------------------------------------------------------\n+\n+The ``show running`` command is the most resource-intensive command to execute on a network device, because of the way queries are handled by the network OS. Using the command in your Ansible playbook will slow performance significantly, especially on large devices; repeating it will multiply the performance hit. If you have a playbook that checks the running config, then executes changes, then checks the running config again, you should expect that playbook to be very slow.\n+\n+.. _network_faq_limit_ProxyCommand:\n+\n+Use ``ProxyCommand`` only if you absolutely must\n+---------------------------------------------------------------------------------\n+\n+Network modules support the use of a :ref:`proxy or jump host<network_delegate_to_vs_ProxyCommand>` with the ``ProxyCommand`` parameter. However, when you use a jump host, Ansible must open a new SSH connection for every task, even if you are using a persistent connection type (``network_cli`` or ``netconf``). To maximize the performance benefits of the persistent connection types introduced in version 2.5, avoid using jump hosts whenever possible.\n+\n+.. _network_faq_set_forks:\n+\n+Set ``--forks`` to match your needs\n+---------------------------------------------------------------------------------\n+\n+Every time Ansible runs a task, it forks its own process. The ``--forks`` parameter defines the number of concurrent tasks - if you retain the default setting, which is ``--forks=5``, and you are running a playbook on 10 hosts, five of those hosts will have to wait until a fork is available. Of course, the more forks you allow, the more memory and processing power Ansible will use. Since most network tasks are run on the control host, this means your laptop can quickly become cpu- or memory-bound. \n+\n+.. _network_faq_redacted_output:\n+\n+Why is my output sometimes replaced with ``********``?\n+======================================================\n+\n+Ansible replaces any string marked ``no_log``, including passwords, with ``********`` in Ansible output. This is done by design, to protect your sensitive data. Most users are happy to have their passwords redacted. However, Ansible replaces every string that matches your password with ``********``. If you use a common word for your password, this can be a problem. For example, if you choose ``Admin`` as your password, Ansible will replace every instance of the word ``Admin`` with ``********`` in your output. This may make your output harder to read. To avoid this problem, select a secure password that will not occur elsewhere in your Ansible output.\n+\n+.. _network_faq_no_abbreviations_with_config:\n+\n+Why do the ``*_config`` modules always return ``changed=true`` with abbreviated commands?\n+=========================================================================================\n+\n+When you issue commands directly on a network device, you can use abbreviated commands. For example, ``int g1/0/11`` and ``interface GigabitEthernet1/0/11`` do the same thing; ``shut`` and ``shutdown`` do the same thing. Ansible's ``*_command`` modules work with abbreviations, because they run commands through the network OS. \n+\n+When committing configuration, however, the network OS converts abbreviations into full descriptions. In the above example, whether you use ``shut`` or ``shutdown`` to close the port on ``GigabitEthernet1/0/1``, the result in the running config is the same: ``shutdown``.\n+\n+Ansible's ``*_config`` modules check the difference between the commands provided and the running configuration. Because existing configuration is always expressed long-form, the ``*_config`` modules will always return ``changed=true`` if you use abbreviations.","path":"docs/docsite/rst/network/user_guide/faq.rst","position":62,"original_position":62,"commit_id":"b487b0f120e5b06e5ddf6e6bc9f89c6ac82ce353","original_commit_id":"b487b0f120e5b06e5ddf6e6bc9f89c6ac82ce353","user":{"login":"acozine","id":879121,"avatar_url":"https://avatars2.githubusercontent.com/u/879121?v=4","gravatar_id":"","url":"https://api.github.com/users/acozine","html_url":"https://github.com/acozine","followers_url":"https://api.github.com/users/acozine/followers","following_url":"https://api.github.com/users/acozine/following{/other_user}","gists_url":"https://api.github.com/users/acozine/gists{/gist_id}","starred_url":"https://api.github.com/users/acozine/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/acozine/subscriptions","organizations_url":"https://api.github.com/users/acozine/orgs","repos_url":"https://api.github.com/users/acozine/repos","events_url":"https://api.github.com/users/acozine/events{/privacy}","received_events_url":"https://api.github.com/users/acozine/received_events","type":"User","site_admin":false},"body":"thanks, I've made some changes to this bit and I think it's better now","created_at":"2018-04-11T15:15:11Z","updated_at":"2018-04-11T15:15:12Z","html_url":"https://github.com/ansible/ansible/pull/38359#discussion_r180792470","pull_request_url":"https://api.github.com/repos/ansible/ansible/pulls/38359","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/ansible/ansible/pulls/comments/180792470"},"html":{"href":"https://github.com/ansible/ansible/pull/38359#discussion_r180792470"},"pull_request":{"href":"https://api.github.com/repos/ansible/ansible/pulls/38359"}},"in_reply_to_id":180549009},"pull_request":{"url":"https://api.github.com/repos/ansible/ansible/pulls/38359","id":179788900,"html_url":"https://github.com/ansible/ansible/pull/38359","diff_url":"https://github.com/ansible/ansible/pull/38359.diff","patch_url":"https://github.com/ansible/ansible/pull/38359.patch","issue_url":"https://api.github.com/repos/ansible/ansible/issues/38359","number":38359,"state":"open","locked":false,"title":"draft Network FAQ","user":{"login":"acozine","id":879121,"avatar_url":"https://avatars2.githubusercontent.com/u/879121?v=4","gravatar_id":"","url":"https://api.github.com/users/acozine","html_url":"https://github.com/acozine","followers_url":"https://api.github.com/users/acozine/followers","following_url":"https://api.github.com/users/acozine/following{/other_user}","gists_url":"https://api.github.com/users/acozine/gists{/gist_id}","starred_url":"https://api.github.com/users/acozine/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/acozine/subscriptions","organizations_url":"https://api.github.com/users/acozine/orgs","repos_url":"https://api.github.com/users/acozine/repos","events_url":"https://api.github.com/users/acozine/events{/privacy}","received_events_url":"https://api.github.com/users/acozine/received_events","type":"User","site_admin":false},"body":"##### SUMMARY\r\nCloses #37935\r\nCloses #37866\r\nCloses #37637 \r\nCloses #37413 \r\n\r\nIntroduces a Network FAQ for 2.5 to the documentation.\r\n\r\n##### ISSUE TYPE\r\n - Docs Pull Request\r\n\r\n##### COMPONENT NAME\r\nNetwork Documentation\r\n\r\n##### ANSIBLE VERSION\r\n2.5 and higher\r\n","created_at":"2018-04-05T20:33:54Z","updated_at":"2018-04-11T15:15:12Z","closed_at":null,"merged_at":null,"merge_commit_sha":"d8e3e87c5709e8ff9a2e0b913192362567b79c8d","assignee":null,"assignees":[],"requested_reviewers":[{"login":"dharmabumstead","id":1683045,"avatar_url":"https://avatars1.githubusercontent.com/u/1683045?v=4","gravatar_id":"","url":"https://api.github.com/users/dharmabumstead","html_url":"https://github.com/dharmabumstead","followers_url":"https://api.github.com/users/dharmabumstead/followers","following_url":"https://api.github.com/users/dharmabumstead/following{/other_user}","gists_url":"https://api.github.com/users/dharmabumstead/gists{/gist_id}","starred_url":"https://api.github.com/users/dharmabumstead/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dharmabumstead/subscriptions","organizations_url":"https://api.github.com/users/dharmabumstead/orgs","repos_url":"https://api.github.com/users/dharmabumstead/repos","events_url":"https://api.github.com/users/dharmabumstead/events{/privacy}","received_events_url":"https://api.github.com/users/dharmabumstead/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[{"id":849212023,"url":"https://api.github.com/repos/ansible/ansible/labels/docs","name":"docs","color":"0052cc","default":false},{"id":61436281,"url":"https://api.github.com/repos/ansible/ansible/labels/needs_revision","name":"needs_revision","color":"eb6450","default":false},{"id":339653091,"url":"https://api.github.com/repos/ansible/ansible/labels/networking","name":"networking","color":"c7def8","default":false},{"id":636352796,"url":"https://api.github.com/repos/ansible/ansible/labels/support:core","name":"support:core","color":"ededed","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/ansible/ansible/pulls/38359/commits","review_comments_url":"https://api.github.com/repos/ansible/ansible/pulls/38359/comments","review_comment_url":"https://api.github.com/repos/ansible/ansible/pulls/comments{/number}","comments_url":"https://api.github.com/repos/ansible/ansible/issues/38359/comments","statuses_url":"https://api.github.com/repos/ansible/ansible/statuses/b487b0f120e5b06e5ddf6e6bc9f89c6ac82ce353","head":{"label":"acozine:network_faq","ref":"network_faq","sha":"b487b0f120e5b06e5ddf6e6bc9f89c6ac82ce353","user":{"login":"acozine","id":879121,"avatar_url":"https://avatars2.githubusercontent.com/u/879121?v=4","gravatar_id":"","url":"https://api.github.com/users/acozine","html_url":"https://github.com/acozine","followers_url":"https://api.github.com/users/acozine/followers","following_url":"https://api.github.com/users/acozine/following{/other_user}","gists_url":"https://api.github.com/users/acozine/gists{/gist_id}","starred_url":"https://api.github.com/users/acozine/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/acozine/subscriptions","organizations_url":"https://api.github.com/users/acozine/orgs","repos_url":"https://api.github.com/users/acozine/repos","events_url":"https://api.github.com/users/acozine/events{/privacy}","received_events_url":"https://api.github.com/users/acozine/received_events","type":"User","site_admin":false},"repo":{"id":118513954,"name":"ansible","full_name":"acozine/ansible","owner":{"login":"acozine","id":879121,"avatar_url":"https://avatars2.githubusercontent.com/u/879121?v=4","gravatar_id":"","url":"https://api.github.com/users/acozine","html_url":"https://github.com/acozine","followers_url":"https://api.github.com/users/acozine/followers","following_url":"https://api.github.com/users/acozine/following{/other_user}","gists_url":"https://api.github.com/users/acozine/gists{/gist_id}","starred_url":"https://api.github.com/users/acozine/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/acozine/subscriptions","organizations_url":"https://api.github.com/users/acozine/orgs","repos_url":"https://api.github.com/users/acozine/repos","events_url":"https://api.github.com/users/acozine/events{/privacy}","received_events_url":"https://api.github.com/users/acozine/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/acozine/ansible","description":"Ansible is a radically simple IT automation platform that makes your applications and systems easier to deploy. Avoid writing scripts or custom code to deploy and update your applications— automate in a language that approaches plain English, using SSH, with no agents to install on remote systems.","fork":true,"url":"https://api.github.com/repos/acozine/ansible","forks_url":"https://api.github.com/repos/acozine/ansible/forks","keys_url":"https://api.github.com/repos/acozine/ansible/keys{/key_id}","collaborators_url":"https://api.github.com/repos/acozine/ansible/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/acozine/ansible/teams","hooks_url":"https://api.github.com/repos/acozine/ansible/hooks","issue_events_url":"https://api.github.com/repos/acozine/ansible/issues/events{/number}","events_url":"https://api.github.com/repos/acozine/ansible/events","assignees_url":"https://api.github.com/repos/acozine/ansible/assignees{/user}","branches_url":"https://api.github.com/repos/acozine/ansible/branches{/branch}","tags_url":"https://api.github.com/repos/acozine/ansible/tags","blobs_url":"https://api.github.com/repos/acozine/ansible/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/acozine/ansible/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/acozine/ansible/git/refs{/sha}","trees_url":"https://api.github.com/repos/acozine/ansible/git/trees{/sha}","statuses_url":"https://api.github.com/repos/acozine/ansible/statuses/{sha}","languages_url":"https://api.github.com/repos/acozine/ansible/languages","stargazers_url":"https://api.github.com/repos/acozine/ansible/stargazers","contributors_url":"https://api.github.com/repos/acozine/ansible/contributors","subscribers_url":"https://api.github.com/repos/acozine/ansible/subscribers","subscription_url":"https://api.github.com/repos/acozine/ansible/subscription","commits_url":"https://api.github.com/repos/acozine/ansible/commits{/sha}","git_commits_url":"https://api.github.com/repos/acozine/ansible/git/commits{/sha}","comments_url":"https://api.github.com/repos/acozine/ansible/comments{/number}","issue_comment_url":"https://api.github.com/repos/acozine/ansible/issues/comments{/number}","contents_url":"https://api.github.com/repos/acozine/ansible/contents/{+path}","compare_url":"https://api.github.com/repos/acozine/ansible/compare/{base}...{head}","merges_url":"https://api.github.com/repos/acozine/ansible/merges","archive_url":"https://api.github.com/repos/acozine/ansible/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/acozine/ansible/downloads","issues_url":"https://api.github.com/repos/acozine/ansible/issues{/number}","pulls_url":"https://api.github.com/repos/acozine/ansible/pulls{/number}","milestones_url":"https://api.github.com/repos/acozine/ansible/milestones{/number}","notifications_url":"https://api.github.com/repos/acozine/ansible/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/acozine/ansible/labels{/name}","releases_url":"https://api.github.com/repos/acozine/ansible/releases{/id}","deployments_url":"https://api.github.com/repos/acozine/ansible/deployments","created_at":"2018-01-22T20:54:15Z","updated_at":"2018-04-10T15:22:17Z","pushed_at":"2018-04-10T18:30:27Z","git_url":"git://github.com/acozine/ansible.git","ssh_url":"git@github.com:acozine/ansible.git","clone_url":"https://github.com/acozine/ansible.git","svn_url":"https://github.com/acozine/ansible","homepage":"https://www.ansible.com/","size":108500,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"gpl-3.0","name":"GNU General Public License v3.0","spdx_id":"GPL-3.0","url":"https://api.github.com/licenses/gpl-3.0"},"forks":0,"open_issues":0,"watchers":0,"default_branch":"devel"}},"base":{"label":"ansible:devel","ref":"devel","sha":"4e38036bbd3e905c877abbf5b2361a0de1c146a8","user":{"login":"ansible","id":1507452,"avatar_url":"https://avatars2.githubusercontent.com/u/1507452?v=4","gravatar_id":"","url":"https://api.github.com/users/ansible","html_url":"https://github.com/ansible","followers_url":"https://api.github.com/users/ansible/followers","following_url":"https://api.github.com/users/ansible/following{/other_user}","gists_url":"https://api.github.com/users/ansible/gists{/gist_id}","starred_url":"https://api.github.com/users/ansible/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ansible/subscriptions","organizations_url":"https://api.github.com/users/ansible/orgs","repos_url":"https://api.github.com/users/ansible/repos","events_url":"https://api.github.com/users/ansible/events{/privacy}","received_events_url":"https://api.github.com/users/ansible/received_events","type":"Organization","site_admin":false},"repo":{"id":3638964,"name":"ansible","full_name":"ansible/ansible","owner":{"login":"ansible","id":1507452,"avatar_url":"https://avatars2.githubusercontent.com/u/1507452?v=4","gravatar_id":"","url":"https://api.github.com/users/ansible","html_url":"https://github.com/ansible","followers_url":"https://api.github.com/users/ansible/followers","following_url":"https://api.github.com/users/ansible/following{/other_user}","gists_url":"https://api.github.com/users/ansible/gists{/gist_id}","starred_url":"https://api.github.com/users/ansible/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ansible/subscriptions","organizations_url":"https://api.github.com/users/ansible/orgs","repos_url":"https://api.github.com/users/ansible/repos","events_url":"https://api.github.com/users/ansible/events{/privacy}","received_events_url":"https://api.github.com/users/ansible/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/ansible/ansible","description":"Ansible is a radically simple IT automation platform that makes your applications and systems easier to deploy. Avoid writing scripts or custom code to deploy and update your applications— automate in a language that approaches plain English, using SSH, with no agents to install on remote systems.","fork":false,"url":"https://api.github.com/repos/ansible/ansible","forks_url":"https://api.github.com/repos/ansible/ansible/forks","keys_url":"https://api.github.com/repos/ansible/ansible/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ansible/ansible/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ansible/ansible/teams","hooks_url":"https://api.github.com/repos/ansible/ansible/hooks","issue_events_url":"https://api.github.com/repos/ansible/ansible/issues/events{/number}","events_url":"https://api.github.com/repos/ansible/ansible/events","assignees_url":"https://api.github.com/repos/ansible/ansible/assignees{/user}","branches_url":"https://api.github.com/repos/ansible/ansible/branches{/branch}","tags_url":"https://api.github.com/repos/ansible/ansible/tags","blobs_url":"https://api.github.com/repos/ansible/ansible/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ansible/ansible/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ansible/ansible/git/refs{/sha}","trees_url":"https://api.github.com/repos/ansible/ansible/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ansible/ansible/statuses/{sha}","languages_url":"https://api.github.com/repos/ansible/ansible/languages","stargazers_url":"https://api.github.com/repos/ansible/ansible/stargazers","contributors_url":"https://api.github.com/repos/ansible/ansible/contributors","subscribers_url":"https://api.github.com/repos/ansible/ansible/subscribers","subscription_url":"https://api.github.com/repos/ansible/ansible/subscription","commits_url":"https://api.github.com/repos/ansible/ansible/commits{/sha}","git_commits_url":"https://api.github.com/repos/ansible/ansible/git/commits{/sha}","comments_url":"https://api.github.com/repos/ansible/ansible/comments{/number}","issue_comment_url":"https://api.github.com/repos/ansible/ansible/issues/comments{/number}","contents_url":"https://api.github.com/repos/ansible/ansible/contents/{+path}","compare_url":"https://api.github.com/repos/ansible/ansible/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ansible/ansible/merges","archive_url":"https://api.github.com/repos/ansible/ansible/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ansible/ansible/downloads","issues_url":"https://api.github.com/repos/ansible/ansible/issues{/number}","pulls_url":"https://api.github.com/repos/ansible/ansible/pulls{/number}","milestones_url":"https://api.github.com/repos/ansible/ansible/milestones{/number}","notifications_url":"https://api.github.com/repos/ansible/ansible/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ansible/ansible/labels{/name}","releases_url":"https://api.github.com/repos/ansible/ansible/releases{/id}","deployments_url":"https://api.github.com/repos/ansible/ansible/deployments","created_at":"2012-03-06T14:58:02Z","updated_at":"2018-04-11T14:21:30Z","pushed_at":"2018-04-11T14:58:03Z","git_url":"git://github.com/ansible/ansible.git","ssh_url":"git@github.com:ansible/ansible.git","clone_url":"https://github.com/ansible/ansible.git","svn_url":"https://github.com/ansible/ansible","homepage":"https://www.ansible.com/","size":117261,"stargazers_count":29539,"watchers_count":29539,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":10815,"mirror_url":null,"archived":false,"open_issues_count":4947,"license":{"key":"gpl-3.0","name":"GNU General Public License v3.0","spdx_id":"GPL-3.0","url":"https://api.github.com/licenses/gpl-3.0"},"forks":10815,"open_issues":4947,"watchers":29539,"default_branch":"devel"}},"_links":{"self":{"href":"https://api.github.com/repos/ansible/ansible/pulls/38359"},"html":{"href":"https://github.com/ansible/ansible/pull/38359"},"issue":{"href":"https://api.github.com/repos/ansible/ansible/issues/38359"},"comments":{"href":"https://api.github.com/repos/ansible/ansible/issues/38359/comments"},"review_comments":{"href":"https://api.github.com/repos/ansible/ansible/pulls/38359/comments"},"review_comment":{"href":"https://api.github.com/repos/ansible/ansible/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/ansible/ansible/pulls/38359/commits"},"statuses":{"href":"https://api.github.com/repos/ansible/ansible/statuses/b487b0f120e5b06e5ddf6e6bc9f89c6ac82ce353"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"acozine"}}