It’s Cybersecurity Awareness Month! Join our interactive training session, or learn about security and AI from 1Password experts.
Forum Discussion
Former Member
3 years agoCreating login items from Ansible
Im trying to figure out how to use 1Password CLI to create items from Ansible.
Everything I tried is giving me an error: "Failed to create item: invalid JSON"
Here is my test task:
- name: Run command
ansible.builtin.command: "op item create --category login --title 'Test'"
delegate_to: localhost
Even running an empty command "op item create" gives the same error about invalid JSON even though I would expect it to fail with something related to a missing category.
I also tried to create a json template and use it, but in that case task finishes fine, but no actual login is created:
- name: Run command
ansible.builtin.command: "echo {{ lookup('file', 'login.tpl') }} | op item create"
delegate_to: localhost
Executing command locally works just fine
CLI version: 2.16.1
What am I doing wrong?
1Password Version: 8.10.4
Extension Version: Not Provided
OS Version: MacOS 13.3.1
Browser:_ Not Provided
4 Replies
- Former Member
Hey everyone,
My apologies for the late response. This seems to be a bug of
op item create
present in piped environments, the workaround is indeed to use--template
or to pipe a part of the item (or a full template) into the command:
op item template get login | op item create
I hope this helps, as a workaround. This is something we're currently looking into fixing, so thank you for raising this!
Best,
Horia - Former Member
@babaika one of my colleagues at work found a solution to this that worked for us. This is what I did in my playbook that worked:
ansible
ansible.builtin.shell:
cmd: |
echo '{ "title": "YOUR TITLE", "fields": [ { "id": "notesPlain", "value": "Hey these are some notes" } ] }' | op item create --vault Private --category "Password" "password={{ super_secret_password }}" --tags=foo --format=JSON
You can get all the fields for the echo json by downloading the template:
shell
op item template get --out-file=password.json "Password"
- Former Member
I am having this exact same issue. Using 1password-cli 2.17.0.
Something to add is that the op get command works fine:
"cmd": ["op", "item", "get", "FOO", "--vault", "Private", "--fields", "notesPlain"]
but the simple create does not:
"cmd": ["op", "item", "create"]
"stderr": "[ERROR] 2023/05/03 14:08:17 Failed to create item: invalid JSON" - Former Member
Here is a raw error msg (from the first command) in case its helpful:
fatal: [ans-test3 -> localhost]: FAILED! => {
"changed": true,
"cmd": [
"op",
"item",
"create",
"--category",
"login",
"--title",
"Test"
],
"delta": "0:00:01.144492",
"end": "2023-04-28 12:21:14.001860",
"invocation": {
"module_args": {
"_raw_params": "op item create --category login --title 'Test'",
"_uses_shell": false,
"argv": null,
"chdir": null,
"creates": null,
"executable": null,
"removes": null,
"stdin": null,
"stdin_add_newline": true,
"strip_empty_ends": true
}
},
"msg": "non-zero return code",
"rc": 1,
"start": "2023-04-28 12:21:12.857368",
"stderr": "[ERROR] 2023/04/28 12:21:13 Failed to create item: invalid JSON",
"stderr_lines": [
"[ERROR] 2023/04/28 12:21:13 Failed to create item: invalid JSON"
],
"stdout": "",
"stdout_lines": []
}