# -*- coding: utf-8 -*- # Copyright (c) 2018, Scott Buchanan # Copyright (c) 2016, Andrew Zenk (lastpass.py used as starting point) # Copyright (c) 2018, Ansible Project # GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt) # SPDX-License-Identifier: GPL-3.0-or-later from __future__ import (absolute_import, division, print_function) __metaclass__ = type DOCUMENTATION = ''' name: onepassword_raw author: - Scott Buchanan (@scottsb) - Andrew Zenk (@azenk) - Sam Doran (@samdoran) requirements: - C(op) 1Password command line utility short_description: Fetch an entire item from 1Password description: - P(community.general.onepassword_raw#lookup) wraps C(op) command line utility to fetch an entire item from 1Password. options: _terms: description: Identifier(s) (case-insensitive UUID or name) of item(s) to retrieve. required: true type: list elements: string account_id: version_added: 7.5.0 domain: version_added: 6.0.0 service_account_token: version_added: 7.1.0 extends_documentation_fragment: - community.general.onepassword - community.general.onepassword.lookup ''' EXAMPLES = """ - name: Retrieve all data about Wintermute ansible.builtin.debug: var: lookup('community.general.onepassword_raw', 'Wintermute') - name: Retrieve all data about Wintermute when not signed in to 1Password ansible.builtin.debug: var: lookup('community.general.onepassword_raw', 'Wintermute', subdomain='Turing', vault_password='DmbslfLvasjdl') """ RETURN = """ _raw: description: Entire item requested. type: list elements: dict """ import json from ansible_collections.community.general.plugins.lookup.onepassword import OnePass from ansible.plugins.lookup import LookupBase class LookupModule(LookupBase): def run(self, terms, variables=None, **kwargs): self.set_options(var_options=variables, direct=kwargs) vault = self.get_option("vault") subdomain = self.get_option("subdomain") domain = self.get_option("domain", "1password.com") username = self.get_option("username") secret_key = self.get_option("secret_key") master_password = self.get_option("master_password") service_account_token = self.get_option("service_account_token") account_id = self.get_option("account_id") connect_host = self.get_option("connect_host") connect_token = self.get_option("connect_token") op = OnePass( subdomain=subdomain, domain=domain, username=username, secret_key=secret_key, master_password=master_password, service_account_token=service_account_token, account_id=account_id, connect_host=connect_host, connect_token=connect_token, ) op.assert_logged_in() values = [] for term in terms: data = json.loads(op.get_raw(term, vault)) values.append(data) return values