如何以幂等方式在Ansible中创建Django超级用户?

时间:2017-08-28 08:52:39

标签: django ansible

我正在使用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只创建一次用户。

如何使此步骤具有幂等性?

2 个答案:

答案 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