title: How to resolve the dependencies for locally downloaded packages in Ansible? When package A is depends on Package B
body: <p>I have simple playbook where trying to install the Debian packages downloaded locally in my server. This playbook runs on localhost and install the Debian packages in the same system. But this playbook gives an error <strong>"Dependency is not satisfiable</strong> for some of the packages even tough the dependency package is available in the local repository.</p>
  
  <p>I can download all the dependencies required for the specific package in my local repository using <code>apt-get install --download-only package_name</code></p>
  
  <p>But in my playbook, i should have a mechanism to install the dependencies first than install the actual package. This task should be dynamic, playbook should resolve the dependencies by itself for any package install.</p>
  
  <p><strong>When the package has dependency over another package, How the playbook resolve dynamically.</strong></p>
  
  <p>Some of the options explored:</p>
  
  <pre><code>Using ordered indexed_items, using gdebi.. Looking for efficient Logic.
  </code></pre>
  
  <p><strong>Local Repository has packages</strong> -> It can grow depends on the requirement:</p>
  
  <pre><code>wireshark_3.0.5-1_amd64.deb  wireshark-qt_3.0.5-1_amd64.deb
  </code></pre>
  
  <p>Here wireshark_3.0.5-1_amd64.deb  has dependency over wireshark-qt_3.0.5-1_amd64.deb.</p>
  
  <p><strong>install_dependencies.yml</strong></p>
  
  <pre><code>---
  - hosts: localhost
    vars:
      remote_media_directory: "/home/local_repository"
    become: yes
    tasks:
      - name: find all debian Packages
        find:
           paths:
               - "{{ remote_media_directory }}"
           file_type: file
           recurse: yes
           use_regex: yes
           patterns:
             - '.*deb$'
        register: files_matched_subdirectory
  
      - name: installation debian packages
        apt:
          deb: "{{ item.path }}"
        with_items: "{{ files_matched_subdirectory.files }}"
        when: ansible_distribution == "Ubuntu"
  </code></pre>
  
  <p><strong>ansible-playbook install_dependencies.yml</strong></p>
  
  <pre><code>PLAY [localhost] **********************************************************************************************************************************************************************************************
  
  TASK [Gathering Facts] ****************************************************************************************************************************************************************************************
  ok: [localhost]
  
  TASK [find all debian Packages] *******************************************************************************************************************************************************************************
  ok: [localhost]
  
  TASK [installation debian packages] ***************************************************************************************************************************************************************************
  failed: [localhost] (item={u'uid': 0, u'woth': False, u'mtime': 1571850269.5720358, u'inode': 31195175, u'isgid': False, u'size': 46700, u'roth': True, u'isuid': False, u'isreg': True, u'pw_name': u'root', u'gid': 0, u'ischr': False, u'wusr': True, u'xoth': False, u'rusr': True, u'nlink': 1, u'issock': False, u'rgrp': True, u'gr_name': u'root', u'path': u'/home/local_repository/wireshark_3.0.5-1_amd64.deb', u'xusr': False, u'atime': 1571850391.3553286, u'isdir': False, u'ctime': 1571850312.2437878, u'wgrp': False, u'xgrp': False, u'dev': 2051, u'isblk': False, u'isfifo': False, u'mode': u'0644', u'islnk': False}) =&gt; {"changed": false, "item": {"atime": 1571850391.3553286, "ctime": 1571850312.2437878, "dev": 2051, "gid": 0, "gr_name": "root", "inode": 31195175, "isblk": false, "ischr": false, "isdir": false, "isfifo": false, "isgid": false, "islnk": false, "isreg": true, "issock": false, "isuid": false, "mode": "0644", "mtime": 1571850269.5720358, "nlink": 1, "path": "/home/local_repository/wireshark_3.0.5-1_amd64.deb", "pw_name": "root", "rgrp": true, "roth": true, "rusr": true, "size": 46700, "uid": 0, "wgrp": false, "woth": false, "wusr": true, "xgrp": false, "xoth": false, "xusr": false}, "msg": "Dependency is not satisfiable: wireshark-qt (= 3.0.5-1)\n"}
  failed: [localhost] (item={u'uid': 0, u'woth': False, u'mtime': 1571850269.4560366, u'inode': 31195174, u'isgid': False, u'size': 3605060, u'roth': True, u'isuid': False, u'isreg': True, u'pw_name': u'root', u'gid': 0, u'ischr': False, u'wusr': True, u'xoth': False, u'rusr': True, u'nlink': 1, u'issock': False, u'rgrp': True, u'gr_name': u'root', u'path': u'/home/local_repository/wireshark-qt_3.0.5-1_amd64.deb', u'xusr': False, u'atime': 1571850394.3993108, u'isdir': False, u'ctime': 1571850312.2437878, u'wgrp': False, u'xgrp': False, u'dev': 2051, u'isblk': False, u'isfifo': False, u'mode': u'0644', u'islnk': False}) =&gt; {"changed": false, "item": {"atime": 1571850394.3993108, "ctime": 1571850312.2437878, "dev": 2051, "gid": 0, "gr_name": "root", "inode": 31195174, "isblk": false, "ischr": false, "isdir": false, "isfifo": false, "isgid": false, "islnk": false, "isreg": true, "issock": false, "isuid": false, "mode": "0644", "mtime": 1571850269.4560366, "nlink": 1, "path": "/home/local_repository/wireshark-qt_3.0.5-1_amd64.deb", "pw_name": "root", "rgrp": true, "roth": true, "rusr": true, "size": 3605060, "uid": 0, "wgrp": false, "woth": false, "wusr": true, "xgrp": false, "xoth": false, "xusr": false}, "msg": "Dependency is not satisfiable: libc6 (&gt;= 2.29)\n"}
  ok: [localhost] =&gt; (item={u'uid': 0, u'woth': False, u'mtime': 1571850217.1323407, u'inode': 31195169, u'isgid': False, u'size': 40654, u'roth': True, u'isuid': False, u'isreg': True, u'pw_name': u'root', u'gid': 0, u'ischr': False, u'wusr': True, u'xoth': False, u'rusr': True, u'nlink': 1, u'issock': False, u'rgrp': True, u'gr_name': u'root', u'path': u'/home/local_repository/tree_1.7.0-5_amd64.deb', u'xusr': False, u'atime': 1571850397.4392931, u'isdir': False, u'ctime': 1571850312.2437878, u'wgrp': False, u'xgrp': False, u'dev': 2051, u'isblk': False, u'isfifo': False, u'mode': u'0644', u'islnk': False})
  ok: [localhost] =&gt; (item={u'uid': 0, u'woth': False, u'mtime': 1571850217.0163412, u'inode': 31195168, u'isgid': False, u'size': 52132, u'roth': True, u'isuid': False, u'isreg': True, u'pw_name': u'root', u'gid': 0, u'ischr': False, u'wusr': True, u'xoth': False, u'rusr': True, u'nlink': 1, u'issock': False, u'rgrp': True, u'gr_name': u'root', u'path': u'/home/local_repository/dstat_0.7.3-1_all.deb', u'xusr': False, u'atime': 1571850399.3192823, u'isdir': False, u'ctime': 1571850312.2437878, u'wgrp': False, u'xgrp': False, u'dev': 2051, u'isblk': False, u'isfifo': False, u'mode': u'0644', u'islnk': False})
          to retry, use: --limit @/home/upgrade/ansible/install_dependencies.retry
  
  PLAY RECAP ****************************************************************************************************************************************************************************************************
  localhost                  : ok=2    changed=0    unreachable=0    failed=1
  </code></pre>