#!/usr/bin/python # Mock apt module for Docker testing import subprocess from ansible.module_utils.basic import AnsibleModule def main(): module = AnsibleModule( argument_spec={ 'name': {'type': 'list', 'aliases': ['pkg', 'package']}, 'state': {'type': 'str', 'default': 'present', 'choices': ['present', 'absent', 'latest', 'build-dep', 'fixed']}, 'update_cache': {'type': 'bool', 'default': False}, 'cache_valid_time': {'type': 'int', 'default': 0}, 'install_recommends': {'type': 'bool'}, 'force': {'type': 'bool', 'default': False}, 'allow_unauthenticated': {'type': 'bool', 'default': False}, 'allow_downgrade': {'type': 'bool', 'default': False}, 'allow_change_held_packages': {'type': 'bool', 'default': False}, 'dpkg_options': {'type': 'str', 'default': 'force-confdef,force-confold'}, 'autoremove': {'type': 'bool', 'default': False}, 'purge': {'type': 'bool', 'default': False}, 'force_apt_get': {'type': 'bool', 'default': False}, }, supports_check_mode=True ) name = module.params['name'] state = module.params['state'] update_cache = module.params['update_cache'] result = { 'changed': False, 'cache_updated': False, 'cache_update_time': 0 } # Log the operation with open('/var/log/mock-apt-module.log', 'a') as f: f.write(f"apt module called: name={name}, state={state}, update_cache={update_cache}\n") # Handle cache update if update_cache: # In Docker, apt-get update was already run in entrypoint # Just pretend it succeeded result['cache_updated'] = True result['cache_update_time'] = 1754231778 # Fixed timestamp result['changed'] = True # Handle package installation/removal if name: packages = name if isinstance(name, list) else [name] # Check which packages are already installed installed_packages = [] for pkg in packages: # Use dpkg to check if package is installed check_cmd = ['dpkg', '-s', pkg] rc = subprocess.run(check_cmd, capture_output=True) if rc.returncode == 0: installed_packages.append(pkg) if state in ['present', 'latest']: # Check if we need to install anything missing_packages = [p for p in packages if p not in installed_packages] if missing_packages: # Log what we would install with open('/var/log/mock-apt-module.log', 'a') as f: f.write(f"Would install packages: {missing_packages}\n") # For our test purposes, these packages are pre-installed in Docker # Just report success result['changed'] = True result['stdout'] = f"Mock: Packages {missing_packages} are already available" result['stderr'] = "" else: result['stdout'] = "All packages are already installed" elif state == 'absent': # Check if we need to remove anything present_packages = [p for p in packages if p in installed_packages] if present_packages: result['changed'] = True result['stdout'] = f"Mock: Would remove packages {present_packages}" else: result['stdout'] = "No packages to remove" # Always report success for our testing module.exit_json(**result) if __name__ == '__main__': main()