OpenStack Heat

Материал из naname.com.ua
Перейти к навигацииПерейти к поиску

Полностью устарело, читать нужно свежую документацию

Heat

Это API аналогичный Amazon Cloud Formation.
В качестве введения почитать здесь: Интересная Презентация
А вот официальная документация: https://wiki.openstack.org/wiki/Heat

Get started

Я не большой знаток OpenStack но как я понимаю, на данный момент требуется дополнительно включать heat-api. По-умолчанию он отключён.

  • Кроме того, удобнее всего использовать образы, уже подготовленные - как я понимаю, что то вроде https://github.com/rackerjoe/oz-image-build

Провека работы API

heat list

В моем случае уже есть один экземпляр

heat list 
+--------------------------------------+--------------+-----------------+----------------------+
| ID                                   | Name         | Status          | Created              |
+--------------------------------------+--------------+-----------------+----------------------+
| 4fa6ebc8-c4ab-40ac-b076-03df16e90fb7 | mmaxur_test1 | CREATE_COMPLETE | 2013-03-15T12:02:01Z |
+--------------------------------------+--------------+-----------------+----------------------+

Залить образ

glance add name="F16" container_format=bare disk_format=qcow2 is-public=true </opt/stack/devstack/files/F16-i386-cfntools.qcow2

Внимание - авторизация в переменных окружения, не забывать! source ./lab1

export OS_USERNAME=admin
export OS_PASSWORD=тут_пароль
export OS_AUTH_URL=http://172.18.196.75:5000/v2.0/
export SERVICE_ENDPOINT="http://172.18.196.75:35357/v2.0"
export OS_SERVICE_TOKEN=123451243543453

Добавить ключ

ssh-keygen
cd .ssh
nova keypair-add --pub_key id_rsa.pub mykey
nova keypair-list
+-------+-------------------------------------------------+
|  Name |                   Fingerprint                   |
+-------+-------------------------------------------------+
| mykey  | b0:18:32:fa:4e:d4:3c:1b:c4:6c:dd:cb:53:29:13:82 |
| mykey2 | b0:18:32:fa:4e:d4:3c:1b:c4:6c:dd:cb:53:29:13:82 |
+-------+-------------------------------------------------+

Создание VM

heat stack-create mmaxur_test1  --template-file=./MySQL_Single_Instance.template --parameters="InstanceType=t1.micro;DBUsername=test;DBRootPassword=test;DBName=test;DBPassword=test;KeyName=heat_key;LinuxDistribution=F16"

Обратить внимание что F16 это ссылка на маппинг в темплейте, который в конечном итоге приводит к образу который УЖЕ должен быть залит в опенстек.

Проблемы

Проблемы я бы подразделил на 2 группы

Проблемы с темплейтом и ошибки

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

  • Если указана разрядность 32 бита для 64 битного образа и наоборот

Проблемы после старта темплейта

Первое (и пожалуй единственное) что следует проверить - каталог /var/lib/cloud/data
Там лежат все данные, собственно все что нужно. Единственное - что Wait Timeout в темплейте следует увеличить что бы в случае ошибки было время разобраться.

Heat/AWS-to-OpenStack-resource-mapping-in-templates

We want to have non-amazon identifiers for the Heat resource types. These terms would be interchangeable in the template files, e.g. having `AWS::EC2::Instance` or `OS::Nova::Server` would produce the same result. The original identifiers are in the form of `AWS::<product>::<resource>`. The list tries to use the OpenStack project and resource names where available. This is the list of proposed names:

    AWS::CloudFormation::Stack => OS::Heat::Stack
    AWS::CloudFormation::WaitCondition => OS::Heat::WaitCondition
    AWS::CloudFormation::WaitConditionHandle => OS::Heat::WaitConditionHandle
    AWS::CloudWatch::Alarm => OS::CloudWatch::Alarm
    AWS::EC2::EIP => OS::Nova::FloatingIP
    AWS::EC2::EIPAssociation => OS::Nova::FloatingIPAssociation
    AWS::EC2::Instance => OS::Nova::Server
    AWS::EC2::SecurityGroup => OS::Nova::SecurityGroup
    AWS::EC2::Volume => OS::Nova::Volume
    AWS::EC2::VolumeAttachment => OS::Nova::VolumeAttachment
    AWS::ElasticLoadBalancing::LoadBalancer => OS::ElasticLoadBalancing::LoadBalancer
    AWS::S3::Bucket => OS::Swift::Container
    AWS::IAM::User => OS::Keystone::User
    AWS::IAM::AccessKey => OS::Keystone::AccessKey
    HEAT::HA::Restarter => OS::Heat::Restarter
    AWS::AutoScaling::LaunchConfiguration => OS::AutoScaling::LaunchConfiguration
    AWS::AutoScaling::AutoScalingGroup => OS::AutoScaling::AutoScalingGroup
    AWS::AutoScaling::ScalingPolicy => OS::AutoScaling::ScalingPolicy
    AWS::RDS::DBInstance => OS::RDS::DBInstance

https://wiki.openstack.org/wiki/Heat/AWS-to-OpenStack-resource-mapping-in-templates



Тестовый темплейт

Я тестировал с вот таким темплейтом:

{
  "AWSTemplateFormatVersion" : "2010-09-09",

  "Description" : "A Database instance running a local MySQL server",

  "Parameters" : {

    "KeyName" : {
      "Description" : "Name of an existing EC2 KeyPair to enable SSH access to the instances",
      "Type" : "String"
    },

    "InstanceType" : {
      "Description" : "Database server EC2 instance type",
      "Type" : "String",
      "AllowedValues" : [ "t1.micro" ],
      "ConstraintDescription" : "must be a valid EC2 instance type."
    },

    "DBName": {
      "Description" : "The database name",
      "Type": "String",
      "MinLength": "1",
      "MaxLength": "64",
      "AllowedPattern" : "[a-zA-Z][a-zA-Z0-9]*",
      "ConstraintDescription" : "must begin with a letter and contain only alphanumeric characters."
    },

    "DBUsername": {
      "NoEcho": "true",
      "Description" : "The database admin account username",
      "Type": "String",
      "MinLength": "1",
      "MaxLength": "16",
      "AllowedPattern" : "[a-zA-Z][a-zA-Z0-9]*",
      "ConstraintDescription" : "must begin with a letter and contain only alphanumeric characters."
    },

    "DBPassword": {
      "NoEcho": "true",
      "Description" : "The database admin account password",
      "Type": "String",
      "MinLength": "1",
      "MaxLength": "41",
      "AllowedPattern" : "[a-zA-Z0-9]*",
      "ConstraintDescription" : "must contain only alphanumeric characters."
    },

    "DBRootPassword": {
      "NoEcho": "true",
      "Description" : "Root password for MySQL",
      "Type": "String",
      "MinLength": "1",
      "MaxLength": "41",
      "AllowedPattern" : "[a-zA-Z0-9]*",
      "ConstraintDescription" : "must contain only alphanumeric characters."
    },
    "LinuxDistribution": {
      "Description" : "Distribution of choice",
      "Type": "String",
      "AllowedValues" : [ "F16" ],
      "Default": "F16"
    }
  },

  "Mappings" : {
    "AWSInstanceType2Arch" : {
      "t1.micro"    : { "Arch" : "32" }
    },
    "DistroArch2AMI": {
      "F16" : { "32" : "F16-i386-cfntools" }
    }
  },

  "Resources" : {
    "MySqlDatabaseServer": {
      "Type": "AWS::EC2::Instance",
      "Metadata" : {
        "AWS::CloudFormation::Init" : {
          "config" : {
            "packages" : {
              "yum" : {
                "mysql"        : [],
                "tomcat"       : [],
                "puppet"       : [],
                "mc"           : [],
                "mysql-server" : []
              }
            },
            "services" : {
              "systemd" : {
                "mysqld"   : { "enabled" : "true", "ensureRunning" : "true" }
              }
            }
          }
        }
      },
      "Properties": {
        "ImageId" : { "Fn::FindInMap" : [ "DistroArch2AMI", { "Ref" : "LinuxDistribution" },
                          { "Fn::FindInMap" : [ "AWSInstanceType2Arch", { "Ref" : "InstanceType" }, "Arch" ] } ] },
        "InstanceType"   : { "Ref" : "InstanceType" },
        "KeyName"        : { "Ref" : "KeyName" },
        "UserData"       : { "Fn::Base64" : { "Fn::Join" : ["", [
          "#!/bin/bash -v\n",

          "# Helper function\n",
          "function error_exit\n",
          "{\n",
          "  /opt/aws/bin/cfn-signal -e 1 -r \"$1\" '", { "Ref" : "MySqlWaitHandle" }, "'\n",
          "  exit 1\n",
          "}\n",

          "/opt/aws/bin/cfn-init -s ", { "Ref" : "AWS::StackName" },
          " -r MySqlDatabaseServer ",
          " --region ", { "Ref" : "AWS::Region" },
          " || error_exit 'Failed to run cfn-init'  \n",

          "# Setup MySQL root password and create a user\n",
          "mysqladmin -u root password '", { "Ref" : "DBRootPassword" }, "'\n",
          "cat << EOF | mysql -u root --password='", { "Ref" : "DBRootPassword" }, "'\n",
          "CREATE DATABASE ", { "Ref" : "DBName" }, ";\n",
          "GRANT ALL PRIVILEGES ON ", { "Ref" : "DBName" }, ".* TO \"", { "Ref" : "DBUsername" }, "\"@\"%\"\n",
          "IDENTIFIED BY \"", { "Ref" : "DBPassword" }, "\";\n",
          "FLUSH PRIVILEGES;\n",
          "EXIT\n",
          "EOF\n",
          "# All is well so signal success\n",
          "/opt/aws/bin/cfn-signal -e 0 -r \"MySQL Database setup complete\" '",
          { "Ref" : "MySqlWaitHandle" }, "'\n"
        ]]}}
      }
    },

    "MySqlWaitHandle" : {
      "Type" : "AWS::CloudFormation::WaitConditionHandle"
    },

    "MySqlWaitCondition" : {
      "Type" : "AWS::CloudFormation::WaitCondition",
      "DependsOn" : "MySqlDatabaseServer",
      "Properties" : {
        "Handle" : {"Ref" : "MySqlWaitHandle"},
        "Timeout" : "6000"
      }
    }

  },

  "Outputs" : {
    "PublicIp": {
      "Value": { "Fn::GetAtt" : [ "MySqlDatabaseServer", "PublicIp" ] },
      "Description": "Database server IP"
    }
  }
}

Пару слов об установке

Копипаста, с моими исправлениями и дополнениями

Устанавливаем зависимости

yum install gmp-devel libxml2-devel libxslt-devel python-keyring python-pip

Устанавливаем Heat и клиент к нему

easy_install pip

Пишут что надо делать так:

pip install heat python-heatclient
<PRE>
yum -y install python-devel

По-моему верно так:

pip install  python-heatclient
pip install  migrate
git clone git://github.com/openstack/heat.git

перейти в папку куда скачались исходники, это по сути питоновский модуль. Собрать пакет

python setup.py bdist --formats=rpm

И, соответвенно, его установить (/usr/src/heat - куда я скачал сорцы)

cd /usr/src/heat/dist
rpm -ivh heat-2013.2.a7.g1b609f3-1.noarch.rpm

Внимание - у меня были проблемы с версиями питоновских пакетов

heat-db-setup rpm

Ругался так:

heat-db-setup rpm
Installing on an RPM system.
Please enter the password for the 'root' MySQL user: 
Verified connectivity to MySQL.
Creating 'heat' database.
Traceback (most recent call last):
  File "/usr/lib64/python2.6/runpy.py", line 122, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "/usr/lib64/python2.6/runpy.py", line 34, in _run_code
    exec code in run_globals
  File "/usr/lib/python2.6/site-packages/heat/db/sqlalchemy/manage.py", line 2, in <module>
    from migrate.versioning.shell import main
  File "/usr/lib/python2.6/site-packages/migrate/__init__.py", line 9, in <module>
    from migrate.changeset import *
  File "/usr/lib/python2.6/site-packages/migrate/changeset/__init__.py", line 10, in <module>
    import sqlalchemy
ImportError: No module named sqlalchemy
Traceback (most recent call last):
  File "/usr/lib64/python2.6/runpy.py", line 122, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "/usr/lib64/python2.6/runpy.py", line 34, in _run_code
    exec code in run_globals
  File "/usr/lib/python2.6/site-packages/heat/db/sqlalchemy/manage.py", line 2, in <module>
    from migrate.versioning.shell import main
  File "/usr/lib/python2.6/site-packages/migrate/__init__.py", line 9, in <module>
    from migrate.changeset import *
  File "/usr/lib/python2.6/site-packages/migrate/changeset/__init__.py", line 10, in <module>
    import sqlalchemy
ImportError: No module named sqlalchemy
ERROR 1146 (42S02) at line 1: Table 'heat.migrate_version' doesn't exist
Final sanity check failed.
[root@fuel-pm dist]#

Нужно:

pip freeze | grep -i sql
SQLAlchemy==0.7.8
sqlalchemy-migrate==0.7.2

Убеждаемся БД доступна и создаем базу для heat

heat-db-setup rpm --rootpw <mysql_root_pass>

Правим файл /usr/bin/heat-keystone-setup

Заменяем localhost на наш внешний URL для доступа

    add_endpoint $HEAT_CFN_SERVICE 'http://<external_url>:8000/v1'
    add_endpoint $HEAT_OS_SERVICE 'http://<external_url>:8004/v1/%(tenant_id)s'

Ну или не заменяем - смотря где надо что бы heat слушал.

Устанавливаем переменные для авторизации

Ничего лишнего, это важно!

export OS_PASSWORD=superpass
export OS_AUTH_URL=http://<external_url>:5000/v2.0
export OS_USERNAME=admin
export OS_TENANT_NAME=admin

Убеждаемся что keystone работает и есть доступ к нему

keystone tenant-list
keystone user-list
+----------------------------------+--------+---------+--------------------+
|                id                |  name  | enabled |       email        |
+----------------------------------+--------+---------+--------------------+
| xxxxxxxxxxxxx9d9be82b5a1bdb6abbe | admin  |   True  | admin@example.com  |
| xxxxxxxxxxxxx4969f084cb61d57c3cd | cinder |   True  | cinder@example.com |
| xxxxxxxxxxxxx91aa8005c7144b2b022 |  demo  |   True  | admin@example.com  |
| xxxxxxxxxxxxx126b73f11b7fb002e6e | glance |   True  | glance@example.com |
| xxxxxxxxxxxxx6eca76d2d837fa4d7cf |  nova  |   True  |  nova@example.com  |
| xxxxxxxxxxxxx69da3c9fb608c9f5d3a | swift  |   True  | swift@example.com  |
+----------------------------------+--------+---------+--------------------+

Для того что бы все работало проверить окружение:

export OS_USERNAME=admin
export OS_PASSWORD=тут_пароль
export OS_TENANT_NAME=admin
export OS_AUTH_URL=http://172.18.196.75:5000/v2.0/

Добавляем пользователя, сервисы и ендпоинт для heat

heat-keystone-setup
# heat-keystone-setup
Using the OS_PASSWORD for the SERVICE_PASSWORD.
ADMIN_ROLE 344faa636e124ed3a6d245xxxxxxxxxx
SERVICE_TENANT 51dcf4bbc30f45849001a1xxxxxxxxxx
SERVICE_PASSWORD xxxxxxxx
SERVICE_TOKEN 3c4f04755xxxxxxxx
Creating heat user...
HEAT_USERID a6e81de475da4769a5xxxxxxxxx
+----------+----------------------------------+
| Property |              Value               |
+----------+----------------------------------+
|    id    | ea519d7460cf43f199ea84xxxxxxxxxx |
|   name   |         heat_stack_user          |
+----------+----------------------------------+
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
|   adminurl  |     http://localhost:8000/v1     |
|      id     | 6b16b288c87443eab8c9cxxxxxxxxxxx |
| internalurl |     http://localhost:8000/v1     |
|  publicurl  |     http://localhost:8000/v1     |
|    region   |            RegionOne             |
|  service_id | 9c5a6a0581a741e48acb60xxxxxxxxxx |
+-------------+----------------------------------+
+-------------+----------------------------------------+
|   Property  |                 Value                  |
+-------------+----------------------------------------+
|   adminurl  | http://localhost:8004/v1/%(tenant_id)s |
|      id     |    6ca47cb321204a10a6c934xxxxxxxxxx    |
| internalurl | http://localhost:8004/v1/%(tenant_id)s |
|  publicurl  | http://localhost:8004/v1/%(tenant_id)s |
|    region   |               RegionOne                |
|  service_id |    76058fea4d7e45c4acc102xxxxxxxxxx    |
+-------------+----------------------------------------+


Правим файл /etc/heat/heat-engine.conf

Заменяем адреса 127.0.0.1 на внешние URL

heat_metadata_server_url = http://<external_url>:8000
heat_waitcondition_server_url = http://<external_url>:8000/v1/waitcondition
heat_watch_server_url = http://<external_url>:8003

Правим файлы

/etc/heat/heat-api-cfn-paste.ini
/etc/heat/heat-api-cloudwatch-paste.ini
/etc/heat/heat-api-paste.ini

В каждом устанавливаем наши credentials

admin_tenant_name = admin
admin_user = admin
admin_password = superpass

Открываем порты 8000, 8003, 8004

iptables -A INPUT -m state --state NEW -p tcp --dport 8000 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 8003 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 8004 -j ACCEPT

Создаем системного пользователя для запуска демонов

useradd -d /var/lib/heat -m -r -s /sbin/nologin heat

Заливаем инит скрипты в /etc/init.d/

openstack-heat-engine
openstack-heat-api
openstack-heat-api-cfn
openstack-heat-api-cloudwatch

Ставим в автозапуск

chkconfig openstack-heat-engine on
chkconfig openstack-heat-api on
chkconfig openstack-heat-api-cfn on
chkconfig openstack-heat-api-cloudwatch on

Запускаем сервисы

/etc/init.d/openstack-heat-engine start
/etc/init.d/openstack-heat-api start
/etc/init.d/openstack-heat-api-cfn start
/etc/init.d/openstack-heat-api-cloudwatch start

Проверяем

heat stack-list

Ошибок быть не должно

Ошибки и проблемы

Установка прошла совсем не гладко.

  • т.к. качаем из git то есть шанс скачать нерабочую версию. Т.е. вчера работало, сегодня уже нет. Со мной такое случилось, я взял с "замороженного" сервера. Как "лечить" еслинет заведомо рабочего кода - не знаю.
  • библиотеки нужные heat могут и будут конфликтовать с Openstack Folsom. Как минимум glance не работает!

список библиотек и версий с которыми у меня заработал heat

# pip freeze
Cheetah==2.4.1
Django==1.4.5
M2Crypto==0.20.2
Markdown==2.0.1
MySQL-python==1.2.3c1
Paste==1.7.4
PasteDeploy==1.3.3
PasteScript==1.7.3
PyPAM==0.5.0
PyYAML==3.10
Pygments==1.1.1
Routes==1.13
SQLAlchemy==0.7.8
SSSDConfig==1.9.2
Tempita==0.5.1
WebOb==1.2.3
amqplib==0.6.1
anyjson==0.3.1
argparse==1.2.1
boto==2.5.2
cinder==2012.2.1
cliff==1.3
cmd2==0.6.4
configobj==4.6.0
crypto==1.0.0
decorator==3.4.0
distribute==0.6.35
django-appconf==0.5
django-compressor==1.2
django-openstack-auth==1.0.2
ethtool==0.6
eventlet==0.9.17
firstboot==1.110
glance==2012.2.3
greenlet==0.3.1
heat==2013.1.a310.gb8b5624
horizon==2012.2.1
httplib2==0.7.7
iniparse==0.3.1
iso8601==0.1.4
iwlib==1.0
jsonschema==0.2
keyring==0.7
keystone==2012.2.1
kombu==1.1.3
lxml==2.2.3
migrate==0.2.2
netaddr==0.7.5
netifaces==0.5
nose==0.10.4
nova==2012.2.2
numpy==1.4.1
oslo.config==1.1.0
paramiko==1.7.5
passlib==1.5.3
prettytable==0.6.1
pyOpenSSL==0.10
pyasn1==0.1.6
pycrypto==2.6
pycryptsetup==0.0.11
pycurl==7.19.0
pygpgme==0.1
pykickstart==1.74.12
pyparsing==1.5.6
pysendfile==2.0.0
python-cinderclient==0.2.26
python-dateutil==1.4.1
python-glanceclient==0.5.1
python-heatclient==0.2.1
python-keyczar==0.71c
python-keystoneclient==0.2.3
python-ldap==2.3.10
python-meh==0.11
python-memcached==1.43
python-novaclient==2.10.0
python-nss==0.13
python-quantumclient==2.1.10.gf6dcfd8
python-swiftclient==1.2.0
pytz==2010h
pyxattr==0.5.0
pyxdg==0.18
qpid-python==0.14
quantum==2012.2.1
repoze.lru==0.6
requests==1.1.0
rsa==3.1.1
scdate==1.9.60
simplejson==2.0.9
slip==0.2.20
sqlalchemy-migrate==0.7.2
swift==1.7.4
swift3==1.0.0
tablib==0.9.11
urlgrabber==3.9.1
versiontools==1.9.1
warlock==0.4.0
websockify==0.2.0
yum-metadata-parser==1.1.2

Список RPM которые относятся к heat

Думаю, часть тут лишняя, список всего что относится к питону и версии:

# rpm -qa | grep python
python-crypto-2.0.1-22.el6.x86_64
python-swiftclient-1.2.0-2.el6.noarch
python-nose-0.10.4-3.1.el6.noarch
python-2.6.6-36.el6.x86_64
gnome-python2-canvas-2.28.0-3.el6.x86_64
libxml2-python-2.7.6-12.el6_4.1.x86_64
libproxy-python-0.3.0-4.el6_3.x86_64
gnome-python2-gnome-2.28.0-3.el6.x86_64
rpm-python-4.8.0-32.el6.x86_64
python-argparse-1.2.1-2.el6.noarch
python-pip-0.8-1.el6.noarch
python-novaclient-2.10.0-1.el6.noarch
python-ethtool-0.6-3.el6.x86_64
python-sqlalchemy0.7-0.7.8-1.el6.x86_64
python-jsonschema-0.2-1.el6.noarch
python-tempita-0.4-2.el6.noarch
python-nova-2012.2.2-1.el6.noarch
python-django-openstack-auth-1.0.2-3.el6.noarch
python-django-compressor-1.2-4.el6.noarch
libuser-python-0.56.13-5.el6.x86_64
python-cryptsetup-0.0.11-1.el6.x86_64
python-meh-0.12.1-3.el6.noarch
python-iniparse-0.3.1-2.1.el6.noarch
python-urlgrabber-3.9.1-8.el6.noarch
python-cliff-1.3-1.el6.noarch
python-devel-2.6.6-36.el6.x86_64
python-routes1.12-1.12.3-4.el6.noarch
python-amqplib-0.6.1-2.el6.noarch
MySQL-python-1.2.3-0.3.c1.1.el6.x86_64
python-iwlib-0.1-1.2.el6.x86_64
cracklib-python-2.8.16-4.el6.x86_64
python-pycurl-7.19.0-8.el6.x86_64
python-paste-script-1.7.3-5.el6_3.noarch
python-webob1.0-1.0.8-3.el6.noarch
python-pyasn1-0.0.12a-1.el6.noarch
python-kombu-1.1.3-1.el6.noarch
python-configobj-4.6.0-3.el6.noarch
python-websockify-0.2.0-1.el6.noarch
libvirt-python-0.10.2-18.el6.x86_64
python-dateutil-1.4.1-6.el6.noarch
python-glance-2012.2.3-1.el6.noarch
python-versiontools-1.9.1-3.el6.noarch
python-keystone-2012.2.1-1.el6.noarch
libreport-python-2.0.9-15.el6.centos.x86_64
abrt-addon-python-2.0.8-15.el6.centos.x86_64
python-prettytable-0.6.1-1.el6.noarch
python-greenlet-0.3.1-12.el6.x86_64
python-quantumclient-2.1.10-1.el6.noarch
python-glanceclient-0.5.1-1.el6.noarch
python-markdown-2.0.1-3.1.el6.noarch
python-anyjson-0.3.1-1.el6.noarch
python-pygments-1.1.1-1.el6.noarch
libselinux-python-2.0.94-5.3.el6.x86_64
python-deltarpm-3.5-0.5.20090913git.el6.x86_64
python-decorator-3.0.1-3.1.el6.noarch
newt-python-0.52.11-3.el6.x86_64
dbus-python-0.83.0-6.1.el6.x86_64
python-httplib2-0.7.7-1.el6.noarch
notify-python-0.1.1-10.el6.x86_64
python-routes-1.10.3-2.el6.noarch
python-keyczar-0.71c-1.el6.noarch
python-iso8601-0.1.4-2.el6.noarch
python-paramiko-1.7.5-2.1.el6.noarch
python-netifaces-0.5-1.el6.x86_64
python-setuptools-0.6.10-3.el6.noarch
python-cinder-2012.2.1-1.el6.noarch
python-lxml-2.2.3-1.1.el6.x86_64
python-django-horizon-2012.2.1-1.el6.noarch
python-passlib-1.5.3-1.el6.noarch
python-nss-0.13-1.el6.x86_64
python-eventlet-0.9.17-2.el6.noarch
python-paste-1.7.4-2.el6.noarch
python-memcached-1.43-6.el6.noarch
python-ldap-2.3.10-1.el6.x86_64
python-netaddr-0.7.5-4.el6.noarch
python-saslwrapper-0.14-1.el6.x86_64
python-cheetah-2.4.1-1.el6.x86_64
python-django-appconf-0.5-2.el6.noarch
boost-python-1.41.0-11.el6_1.2.x86_64
python-cmd2-0.6.4-2.el6.noarch
python-paste-deploy1.5-1.5.0-5.el6.noarch
python-boto-2.5.2-3.el6.noarch
python-qpid-0.14-11.el6_3.noarch
python-cinderclient-0.2.26-1.el6.noarch
python-quantum-2012.2.1-1.el6.noarch
python-slip-0.2.20-1.el6_2.noarch
python-libs-2.6.6-36.el6.x86_64
python-pyblock-0.48-1.el6.x86_64
gnome-python2-2.28.0-3.el6.x86_64
gnome-python2-gnomevfs-2.28.0-3.el6.x86_64
python-simplejson-2.0.9-3.1.el6.x86_64
python-keyring-0.7-1.el6.noarch
python-keystoneclient-0.1.3.27-1.el6.noarch
python-paste-deploy-1.3.3-2.1.el6.noarch
python-warlock-0.4.0-2.el6.noarch
python-tablib-0.9.11.20120702git752443f-5.el6.noarch
python-migrate-0.6-6.el6.noarch

123

init scripts

openstack-heat-api

#!/bin/sh
#
# chkconfig:   - 98 02
#
# heat-api  OpenStack Heat Service
#
### END INIT INFO

. /etc/rc.d/init.d/functions

prog=heat-api
exec="/usr/bin/$prog"
pidfile="/var/run/heat/$prog.pid"

lockfile=/var/lock/subsys/$prog

mkdir -p /var/run/heat
chown -R heat:heat /var/run/heat
mkdir -p /var/log/heat
chown -R heat:heat /var/log/heat

start() {
    [ -x $exec ] || exit 5
    echo -n $"Starting $prog: "
    daemon --user heat --pidfile $pidfile "$exec &>/dev/null & echo \$! > $pidfile"
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}

stop() {
    echo -n $"Stopping $prog: "
    killproc -p $pidfile $prog
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}

restart() {
    stop
    start
}

reload() {
    restart
}

force_reload() {
    restart
}

rh_status() {
    status -p $pidfile $prog
}

rh_status_q() {
    rh_status >/dev/null 2>&1
}


case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
        restart
        ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
        exit 2
esac
exit $?

openstack-heat-api-cfn

#!/bin/sh
#
# chkconfig:   - 98 02
#
# heat-api-cfn  OpenStack Heat Service
#
### END INIT INFO

. /etc/rc.d/init.d/functions

prog=heat-api-cfn
exec="/usr/bin/$prog"
pidfile="/var/run/heat/$prog.pid"

lockfile=/var/lock/subsys/$prog

mkdir -p /var/run/heat
chown -R heat:heat /var/run/heat
mkdir -p /var/log/heat
chown -R heat:heat /var/log/heat

start() {
    [ -x $exec ] || exit 5
    echo -n $"Starting $prog: "
    daemon --user heat --pidfile $pidfile "$exec &>/dev/null & echo \$! > $pidfile"
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}

stop() {
    echo -n $"Stopping $prog: "
    killproc -p $pidfile $prog
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}

restart() {
    stop
    start
}

reload() {
    restart
}

force_reload() {
    restart
}

rh_status() {
    status -p $pidfile $prog
}

rh_status_q() {
    rh_status >/dev/null 2>&1
}


case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
        restart
        ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
        exit 2
esac
exit $?

openstack-heat-api-cloudwatch

#!/bin/sh
#
# chkconfig:   - 98 02
#
# heat-api-cloudwatch  OpenStack Heat Service
#
### END INIT INFO

. /etc/rc.d/init.d/functions

prog=heat-api-cloudwatch
exec="/usr/bin/$prog"
pidfile="/var/run/heat/$prog.pid"

lockfile=/var/lock/subsys/$prog

mkdir -p /var/run/heat
chown -R heat:heat /var/run/heat
mkdir -p /var/log/heat
chown -R heat:heat /var/log/heat

start() {
    [ -x $exec ] || exit 5
    echo -n $"Starting $prog: "
    daemon --user heat --pidfile $pidfile "$exec &>/dev/null & echo \$! > $pidfile"
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}

stop() {
    echo -n $"Stopping $prog: "
    killproc -p $pidfile $prog
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}

restart() {
    stop
    start
}

reload() {
    restart
}

force_reload() {
    restart
}

rh_status() {
    status -p $pidfile $prog
}

rh_status_q() {
    rh_status >/dev/null 2>&1
}


case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
        restart
        ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
        exit 2
esac
exit $?

openstack-heat-engine

#!/bin/sh
#
# chkconfig:   - 98 02
#
# heat-engine  OpenStack Heat Service
#
### END INIT INFO

. /etc/rc.d/init.d/functions

prog=heat-engine
exec="/usr/bin/$prog"
pidfile="/var/run/heat/$prog.pid"

lockfile=/var/lock/subsys/$prog

mkdir -p /var/run/heat
chown -R heat:heat /var/run/heat
mkdir -p /var/log/heat
chown -R heat:heat /var/log/heat

start() {
    [ -x $exec ] || exit 5
    echo -n $"Starting $prog: "
    daemon --user heat --pidfile $pidfile "$exec &>/dev/null & echo \$! > $pidfile"
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}

stop() {
    echo -n $"Stopping $prog: "
    killproc -p $pidfile $prog
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}

restart() {
    stop
    start
}

reload() {
    restart
}

force_reload() {
    restart
}

rh_status() {
    status -p $pidfile $prog
}

rh_status_q() {
    rh_status >/dev/null 2>&1
}


case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
        restart
        ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
        exit 2
esac
exit $?


Ссылки