我正在使用Ansible来部署我的Django应用程序。
我在Ansible手册中有这个步骤来创建一个超级用户:
- name: django create superuser
django_manage:
virtualenv: /.../app
app_path: /.../app
command: "createsuperuser --noinput --username=admin --email=admin@{{ inventory_hostname }}"
但是当我第二次运行我的Playbook时,它因数据库约束错误而失败,因为已经存在具有给定用户名的超级用户。我希望Ansible只创建一次用户。
如何使此步骤具有幂等性?
答案 0 :(得分:3)
这是未经测试但应该有效:
- name: Check if django superuser exists
django_manage:
virtualenv: /.../app
app_path: /.../app
command: shell -c 'import sys; from django.contrib.auth.models import User; sys.exit(0 if User.objects.filter(username="admiin").count() > 0 else 1)'
register: checksuperuser
check_mode: True
ignore_errors: True
changed_when: False
- name: django create superuser
django_manage:
virtualenv: /.../app
app_path: /.../app
command: "createsuperuser --noinput --username=admin --email=admin@{{ inventory_hostname }}"
when: checksuperuser.rc != 0
答案 1 :(得分:0)
另一个选择是告诉ansible忽略该错误:
- name: django create superuser
django_manage:
virtualenv: /.../app
app_path: /.../app
command: "createsuperuser --noinput --username=admin --email=admin@{{ inventory_hostname }}"
ignore_errors: yes