Документация Calculate Linux

Вид материалаДокументы

Содержание


Условные блоки
Подобный материал:
1   ...   76   77   78   79   80   81   82   83   ...   136

Метки


Вы можете настроить систему исходя из аппаратных требований компьютера, сетевых установок и прочих условий. Для этого в файле шаблона вместо постоянных значений, вы можете устанавливать метки переменных.

Пример файла /etc/conf.d/hostname:

HOSTNAME="#-os_net_hostname-#"

Условные блоки


Файл шаблона может содержать условные блоки.

Условные блоки - выделенный текст шаблона, подставляемый в случае соответствия регулярного выражения.

Регулярное выражение - метод проверки значений выражений. В качестве значений могут применяться следующие типы данных:
  • переменные - встроенные переменные Calculate.
  • числа - целые и дробные числа, в качестве разделителя дробной части выступает точка ".".
  • строки - буквы, цифры, специальные символы.
  • номера версий - числа и одна или две точки, разделяющих номер версии (например 8.5.1).

Методом проверки выступает арифметическая операция >, <, ==, !=, >=, <= (больше, меньше, равно, не равно, больше либо равно, меньше либо равно). Тип данных определяется перед операцией сравнения.

Арифметические операции могут объединяться условием "И" (&) и "ИЛИ" (||). Приоритет в данном случае будет отдаваться условию "И".

Условный блок должен начинаться с метки "#?переменная1==значение1(...)#" и заканчивается "#переменная1#", записанными в начале строки.

Пример условного блока файла /etc/make.conf:

#?os_arch_march==i686&os_linux_shortname==CLD#

CFLAGS="-O2 -march=i686 -pipe"

CHOST="i686-pc-linux-gnu"

#os_arch_march#

В приведенном примере сравниваются переменные "setup_march" и "setup_sys_shortname" со строковыми значениями "i686" и "CLD" соответственно. В случае, если значения обоих переменных совпадают, текст блока будет подставлен в результирующий файл.

Функции


Для формирования сложных файлов требующих вычисления во время обработки служат функции. Подобно переменным, функции вставляются в текст шаблона при помощи конструкции "#-функция()-#".

Функции использующие в аргументах путь к файлу (path), могут использовать в качестве домашней директории пользователя '~'

Доступные функции:

belong(pkg_name) - проверка имени устанавливаемого пакета, если выполняется установка пакета. В остальных случаях функция будет возвращать положительный результат.

pkg_name - имя пакета, необязательный аргумент. Если у функции нет аргумента, то аргументом является имя директории в которой находится шаблон с функцией belong().

Результат зависит от значения переменной шаблона cl_belong_pkg
  • значение cl_belong_pkg - ''
    • результат '1', вне зависимости есть или нет аргумент у функции.
  • значение cl_belong_pkg - 'имя_пакета'
    • если совпадают значения cl_belong_pkg и аргумента функции, результат - '1' иначе ''
    • если у функции нет аргумента то сравниваются значение cl_belong_pkg и имя директории в которой находится шаблон с функцией belong(), в случае совпадения результат - '1' иначе ''

Пример. 
Заголовок шаблона1:

# Calculate belong(nss_ldap)=!

Заголовок шаблона2:

# Calculate belong(kdm)=!
  1. Наложим шаблон для программы nss_ldap: Установим значение переменной cl_belong_pkg равным nss_ldap. Будет применен только шаблон1
  2. Наложим все шаблоны. Значение переменной cl_belong_pkg по умолчанию - ''. Будут применены шаблон1 и шаблон2.

case(type,var) - вывод значения переменной шаблона с изменением регистра символов.
где:
  • type - тип изменения регистра: upper - верхний регистр, lower - нижний регистр, capitalize - первая буква в верхнем регистре.
  • var - название переменной шаблона.

Пример. Выведем название хоста в верхнем регистре:

#-case(upper,os_net_hostname)-#

disk(mount_point,name) - выводит значение параметра жесткого диска при инсталяции системы.
Значение функция получает из переменной ('os_install_disk_' + name, если такой не существует, то 'os_disk_'+ name), для поиска нужного значения используется переменная os_install_disk_mount (точки монтирования при инсталяции).

где:
  • mount_point - точка монтирования при инсталяции.
  • name - последний элемент переменных начинающихся на os_install_disk_/os_disk ('os_instll_disk_'/'os_disk_' + name).

значения переменных

os_install_disk_mount = ['swap', '/', '', '', '/var/calculate']
os_disk_grub ['0,0', '0,1', '0,2', '0,3', '0,4']

функция
disk(/var/calculate,grub)
  • в переменной os_install_disk_mount находим /var/calculate, получаем индекс 4
  • в переменной os_disk_grub по индексу 4 получаем значение '0,4'
    результат функции disk(/var/calculate,grub) '0,4'

функция
disk(/boot,grub)
  • в переменной os_install_disk_mount /boot не найден, индекс отсутствует
  • если индекс отсутствует, в переменной os_disk_install находим /, получаем индекс 1
  • в переменной os_disk_grub по индексу 1 получаем значение '0,1'
    результат функции disk(/boot,grub) '0,1'

Пример. 
Выведем диск для загрузчика grub:

#-disk(/boot,grub)-#

получаем значение 0,1

env(service.var_name) - чтение значения записанной переменной шаблона сервиса. Информация получается путем обработки файлов хранения значений переменных шаблонов.

где:
  • service - название сервиса.
  • var_name - переменная сервиса.
    разделитель - '.' точка

Примеры:
  1. прочитаем доменное имя для соединения с jabber сервисом 

#-info(jabber,sr_jabber_host)-#

получаем значение jabber.calculate.ru

exists(path,opt) - проверка существования файла или директории.

Если файл или директория существует выводит '1', иначе ''

path - путь в файловой системе.
opt - необязательная опция.

Возможные значения "opt":
  • root - путь к файлу не будет содержать chroot пути. (какой путь указан такой будет в действительности вне зависимости от переменных cl_chroot_path и cl_root_path)

Пример. Проверим существование директории /etc

#-exists(/etc)-#

Результатом будет '1'

groups(group1,group2,..groupN) - проверка вхождения пользователя в группы group1,group2, ..groupN

Если пользователь входит хотя бы в одну из групп выводит '1', иначе ''

group1 .. groupN - названия групп.

Пример. Проверим входит ли пользователь в группу wheel

#-group(wheel)-#

Результатом будет '1' если пользователь входит в группу wheel

ini(var, value, opt) - запись и чтение переменной из конфигурационного файла пользователя (~/.calculate/ini.env).

где:
  • var - имя переменной функции. Имя должно начинаться с буквы и может содержать латинские буквы и цифры, также может содержать точку. Точка служит разделителем для раздела и имени переменной для размещения в конфигурационном файле.
  • value - значение переменной функции, значение присваивается переменной функции и записывается в конфигурационный файл. При отсутствии второго аргумента, переменная считывается из конфигурационного файла, при отсутствии названия переменной в конфигурационном файле в переменную записывается пустое значение.
  • opt - опция преобразования значения переменной, необязательный параметр, возможные значения url, purl, unicode. При использовании этого аргумента второй аргумент функции должен быть пустым.

Примеры:
  1. Создадим переменную "test" и присвоим ей значение 15, запишем в конфигурационный файл.

#-ini(test,15)-#
  1. Считаем значение ранее записанной в конфигурационный файл переменной test, заменим функцию значением считанной переменной, в нашем случае "15" 

#-ini(test)-#
  1. Использование функции ini c тремя аргументами, предположим что в файле ~/.calculate/ini.env существует секция

[test]

param = Тестовый параметр

тогда функция

#-ini(test.patam,,unicode)-#

вернет

\u0422\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440

а функция

#-ini(test.patam,,url)-#

вернет

%d0%a2%d0%b5%d1%81%d1%82%d0%be%d0%b2%d1%8b%d0%b9%20%d0%bf%d0%b0%d1%80%d0%b0%d0%bc%d0%b5%d1%82%d1%80

Опция purl отличается от url тем что преобразует '/' в код '%2F'

server(service.option,var) - чтение значения параметра сервиса. Информация получается путем обработки файла /var/calculate/remote/server.env

где:
  • service - название сервиса.
  • option - опция сервиса.
  • var - имя переменной функции.(необязательный параметр)
    Разделитель service и option: '.' - точка.
    В случае использования var - имени переменной функции, полученное значение опции сервиса будет записана в переменную функции var.
    Если var не используется, полученное значение опции сервиса будет вставлено в текст конфигурационного файла.

Примеры:
  1. прочитаем значение порта для соединения с jabber сервисом 

#-server(jabber,port)-#

получаем значение 5223
  1. прочитаем значение порта для соединения с jabber сервисом и поместим в переменную функции jabber_port

#-server(jabber,port,jabber_port)-#

значение переменной функции jabber_port - 5223

list(var,index) - вывод значения по индексу из переменной.
где:
  • var - название переменной функции или переменной шаблона (значение переменной должно быть списком).
  • index - индекс для поиска значения в переменной функции или переменной шаблона. (первый элемент имеет индекс 0, и.т. д.)

Пример.
Значение переменной
os_disk_dev = ['/dev/sda1', '/dev/sda2', '/dev/sda3', '/dev/sda4', '/dev/sda5']

#-list(os_disk_dev,1)-#

Метка функции будет заменена на '/dev/sda2'

load(arg,path,opt) - отображение информации из файла.
где:
arg - тип содержимого файла.
opt - необязательная опция.

Возможные значения "opt":
  • root - путь к файлу не будет содержать chroot пути. (какой путь указан такой будет в действительности вне зависимости от переменных cl_chroot_path и cl_root_path)

Возможные значения "arg":
  • ver - содержимое файла номер версии
  • num - содержимое файла число
  • char - содержимое файла строка
  • empty - результат, содержимое файла без закомментированных (комментарии # или ;) и пустых строк.

Возможные значения "path":
  • path - абсолютный или относительный путь к файлу.

Пример. Выведем содержимое /proc/cpuinfo на место объявления функции.

#-load(char,/proc/cpuinfo)-#

module(name_space) - получение переменных шаблонов пакета или выполнение методов пакета используя его api модуль или выполнение определенного метода для всех пакетов у которых есть api модуль.
где:
  • name_space - пространство имен api модуля.

Пространство имен для получения переменных состоит из элементов разделенных точкой.
Первый элемент пространства имен - имя пакета. Имя пакета это название установленного пакета имеющего api модуль (тире '-' в названии должно быть заменено на нижнее подчеркивание '_').
Первый элемент пространства имен для всех пакетов - 'all' (зарезервированное название).
Пример первого элемента для пакета calculate-ldap.

calculate_ldap

Второй элемент пространства имен - название метода api или 'var' - зарезервированное название для пространства имен переменных шаблонов пакета.

Пример первого и второго элементов для пакета calculate-ldap для получения доступа к переменным.

calculate_ldap.var

Пример первого и второго элементов для пакета calculate-ldap для получения результата выполнения метода is_setup() api модуля (проверка, настроен ли пакет?).

calculate_ldap.is_setup

Третий элемент пространства - в большинстве случаев это пространство имен для получения значения переменной шаблона.

Пример пространства имен для получения значения переменной шаблонов cl_name пакета calculate-ldap

calculate_ldap.var.cl_name

Примеры использования функции:
Получим значение переменной шаблонов cl_name (название пакета) пакета calculate-ldap

#-module(calculate_ldap.var.cl_name)-#

получаем значение

calculate-ldap

Проверим настроен ли пакет calculate-ldap для работы

#-module(calculate_ldap.is_setup)-#

получаем значение, если пакет настроен

1

Проверим настроены ли для работы все установленные пакеты имеющие api модуль.

#-module(all.is_setup)-#

получаем значение, если все пакеты настроены

1

pkg (category/package) - вывод версии установленного пакета.
где:
  • category - категория пакета
  • package - название пакета

В качестве совместимого режима можно указывать только название пакета, в этом случае скорость обработки шаблона будет ниже.

Пример. Выведем версию установленного пакета (например 4.2.4).

#-pkg(kde-base/kdelibs)-#

Значит в системе установлен пакет kdelibs-4.2.4

push(var, value) - помещение значения переменной в стек переменных функций шаблонов.

где:
  • var - имя переменной функции. Имя должно начинаться с буквы и может содержать латинские буквы и цифры. Переменная создается на время обработки конфигурационного файла.
  • value - значение переменной функции, значение присваивается переменной функции и заносится в стек переменных функций шаблонов. При отсутствии второго аргумента, в стек переменных функций шаблонов будет записано значение переменной.

Примеры:
  1. Создадим переменную "test" и присвоим ей значение 15, запишем в стек переменных функций шаблонов.

#-push(test,15)-#
  1. Запишем в стек переменных функций шаблонов значение ранее созданной переменной test

#-push(test)-#

pop(var) - извлечение значения из стека переменных функций шаблонов и присвоение его переменной.
  • var - имя переменной функции. Имя должно начинаться с буквы и может содержать латинские буквы и цифры. Переменная создается на время обработки конфигурационного файла.

Примеры:
  1. Создадим переменную "test" и присвоим ей значение 15, запишем в стек переменных функций шаблонов.

#-push(test,15)-#
  1. Получим значение из стека переменных функций шаблонов и присвоим его переменной test2

#-pop(test2)-#

Получить значение из стека переменных функций шаблонов возможно как в текущем шаблоне, так и в любом другом.
После получения значения, оно удаляется из стека.

replace(old, new, var) - замена в значении переменной var текста old, на new.
где:
  • old - текст каждое вхождение которого в значении переменной будет заменено на текст new
  • new - текст на который в значении переменной будет заменен текст old
  • var - название переменной функции или переменной шаблона

Текст old и new должен быть заключен в двойные или одинарные кавычки.

В тексте в двойных кавычках обрабатываются управляющие символы (\', \", \n, \r, \t, \).
В одинарных кавычках текст не обрабатывается.

Пример.
значение переменной шаблона ur_signature

Компания «Калкулэйт»\nРоссия, Санкт-Петербург, пл. Стачек, 4\nlate.ru\n+7 812 3363632\n+7 495 7727678

при выполении функции

#-replace('\n',"\n",ur_signature)-#

в точку вставки будет вставлен следующий текст (символ "\n" будет заменен на перевод строки)

Компания «Калкулэйт»

Россия, Санкт-Петербург, пл. Стачек, 4

late.ru

+7 812 3363632

+7 495 7727678

rnd(type,len) - вывод случайной комбинации символов.
где:
  • type - используемые символы, возможные значения: num - числа, pas - числа и буквы.
  • len - количество символов (число).

Пример. Выведем три 3 случайных числа (например 372).

#-rnd(num,3)-#

sum(var,sum_print, sum_out) - вычисляемые значения смещений. Функция разрабатывалась для настройки ссылка скрыта (KDE).

где:
  • var - имя переменной функции "sum". Имя должно начинаться с буквы и может содержать латинские буквы и цифры. Переменная создается на время обработки конфигурационного файла.
  • sum_print - арифметическое выражение, результат которого будет отображен на месте объявления функции. При отсутствии аргумента, значение выводиться не будет. Поддерживаются операции сложения "+" и вычитания "-", деления "/" и умножения "*". В арифметическом выражении могут участвовать другие переменные функции, а так же переменные шаблона.
  • sum_out - арифметическое выражение, результат которого будет присвоен переменной "var" (первому аргументу функции). При отсутствии третьего аргумента, переменной "var" будет присвоено вычислено значение второго аргумента.

Примеры:
  1. Создадим переменную "clock" и присвоим ей значение 15. Не выводя результат.

#-sum(clock,,15)-#
  1. Создадим переменную "bt", присвоим ей значение переменной "clock" и выведем значение.

#-sum(bt,clock)-#
  1. Разместим кнопку на панели шириной "35" пикселов, оставив отступ в "4" пиксела по краям:

#-sum(bt,bt+2,bt+35+2)-#