首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Ansible中以幂等方式创建Django超级用户?

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

Stack Overflow用户
提问于 2017-08-28 16:52:39
回答 3查看 1.4K关注 0票数 2

我正在使用Ansible部署我的Django应用程序。

在我的Ansible攻略中,我有一个创建超级用户的步骤:

代码语言:javascript
复制
  - name: django create superuser
    django_manage:
      virtualenv: /.../app
      app_path: /.../app
      command: "createsuperuser --noinput --username=admin --email=admin@{{ inventory_hostname }}"

但当我第二次运行我的剧本时,由于数据库约束错误而失败,因为具有给定用户名的超级用户已经存在。我希望Ansible只创建一次用户。

如何使这一步是幂等的?

EN

回答 3

Stack Overflow用户

发布于 2017-08-28 21:00:12

这是未经测试的,但它应该可以工作:

代码语言:javascript
复制
- 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
票数 3
EN

Stack Overflow用户

发布于 2020-06-29 19:00:34

另一种选择是告诉ansible忽略该错误:

代码语言:javascript
复制
- name: django create superuser
  django_manage:
    virtualenv: /.../app
    app_path: /.../app
    command: "createsuperuser --noinput --username=admin --email=admin@{{ inventory_hostname }}"
  ignore_errors: yes
票数 2
EN

Stack Overflow用户

发布于 2021-09-23 13:42:11

Antonis Christofides的回答启发了以下内容,但有几个方面需要改进:

  1. 此版本的经过了测试,适用于me
  2. django_manage不能在check_mode
  3. django_manage中工作不能暴露rc。实际上,它将非零退出视为错误!

我已经使我的工作副本更加通用,显然你需要提供你自己的变量。

代码语言:javascript
复制
- name: Check if django superuser {{ username }} exists
  django_manage:
    command: shell -c 'import sys; from django.contrib.auth.models import User; print(User.objects.filter(username="{{ username }}").count())'
    virtualenv: "{{ working_directory }}/venv"
    project_path: "{{ working_directory }}"

  register: checksuperuser
  ignore_errors: True
  changed_when: False      

- name: django create superuser {{ username }}
  django_manage:
    command: "createsuperuser --noinput --username={{ username }} --email={{ username }}@change-me.example.org"
    virtualenv: "{{ working_directory}}/venv"
    project_path: "{{ working_directory }}"
  when: checksuperuser.out|trim == "0"
  changed_when: True
  ignore_errors: True
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45915174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档