LINUX.ORG.RU
ФорумAdmin

Переменные в плейбуке ansible

 , ,


0

2

Есть часть скрипта bash:

#$USER_PYTHON_BIN $PROJECT_ROOT $SETTINGS_FILE $DJANGO_ADMIN_NAME $DJANGO_ADMIN_PASSWORD
USERNAME=$1
USERS_HOME="/home/wproject"
USER_PYTHON_BIN=$USERS_HOME/$USERNAME/bin/python
USER_PIP_BIN=$USERS_HOME/$USERNAME/bin/pip
USER_HOME_DIR=$USERS_HOME/$USERNAME
USER_UWSGI_BIN=$USERS_HOME/$USERNAME/bin/uwsgi
PROJECT_ROOT=$USERS_HOME/$USERNAME/lib/$PROJECT
SETTINGS_FILE="project_src.settings"
DJANGO_ADMIN_NAME="admin"
DJANGO_ADMIN_PASSWORD=$USERNAME"password"

#$USER_PYTHON_BIN $PROJECT_ROOT $SETTINGS_FILE $DJANGO_ADMIN_NAME 
#$DJANGO_ADMIN_PASSWORD
set_django_admin_password(){
 if [ ! $# -eq "5" ] ; then
    echo "Error![num_args incorrect] function \"set_django_admin_password\" wasn't run"
 else
    $1 <<EOF
import os
import sys
sys.path.insert(0, '$2/src')
os.environ['DJANGO_SETTINGS_MODULE'] = '$3'
import django
django.setup()

from django.contrib.auth.models import User

u = User.objects.get(username__exact='$4')
u.set_password('$5')
u.save()
EOF
 fi
}

Как Вы видите - есть переменные которые гинерируються и передаються скрипту.

Как реализовать аналогично выполнение плейбука ansible?

Начал писать сценарий:

---
- hosts: localhost
  vars_files:
    - flores.yml
  become: yes
  become_user: root
  tasks:
    - name: Create users    
      user: name={{ item.user }} group: {{ item.user }}
      with_items: "{{ flores }}"

    - name: Create user_directory
      file: path=/home/{{ item.repname }} owner={{ item.user }} droup={{ item.user }} mode=0755     
      with_items: "{{ flores }}"

    - name: Arguments 
      shell: python /bin/set_admin_django.py 
      with_items:
       - {

Завис на том, как передать переменные скрипту /bin/set_admin_django.py ...

В файле flores.yml указаные пользователи, для которых выполняеться скрипт.

Подскажите, как реализовать в сценарии генерацию переменных? То есть,(как пример) нужно чтобы в переменную USER_PYTHON_BIN подставлялись USERNAME и USERS_HOME

Простите за такое корявое обьяснение...


Use set_fact, Luke.

Если я правильно понял ваш вопрос.

ugoday ★★★★★
()

Или я чего-то не уловил, или

- name: Arguments 
      shell: "python /bin/set_admin_django.py {{ item.user }} /home/{{ item.repname }}"
      with_items: "{{ flores }}"

dexpl ★★★★★
()

ты with_items неправильно используешь

сделай отдельный yaml с пачкой тасков для одного пользователя

user.yaml:

- name: define user variables
  set_fact:
    user: {{ item.user }}
    group: {{ item.user }}
    home: /home/{{ item.repname }}
    parameters: "-u {{ item.user }}" # что угодно в общем

- name: Create user
  user: name={{ item.user }}
  group: {{ group }}
  home: {{ home }}
  createhome: yes

- name: Run custom script with arguments
  shell: "python some_script.py {{ parameters }}"

А потом импортируй этот отдельный файл целиком с with_items

---
- hosts: localhost
  vars_files:
    - flores.yml
  become: yes
  become_user: root
  tasks:
    - include_tasks:user.yaml
      with_items: "{{ flores }}"
alpha ★★★★★
()
Последнее исправление: alpha (всего исправлений: 1)
Ответ на: комментарий от alpha

Точно, спасибо большое. Сейчас буду пробовать!

LYJEX
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.