반응형

1. git 에서 제일 큰 파일사이즈 찾아내서 없애기

$ git count-objects -v    (size-pack 항목이 Packfile 의 크기임)

$ git verify-pack -v .git/objects/pack/pack-3f8c0...bb.idx | sort -k 3 -n | tail -3  (3번째 항목이 파일 크기임)

$ git rev-list --objects --all | grep 7a9eb2fb   (blob(파일)의 이름을 찾는다)

$ git log --pretty=oneline -- git.tbz2   (git.tbz2 파일의 커밋을 찾는다.)

$ git filter-branch --index-filter 'git rm --cached --ignore-unmatch git.tbz2' 6df7640^..  (6df76 이후의 커밋을 모두 재작성 된다)

$ rm -Rf .git/refs/original   (filter-branch 실행의 상태를 삭제)

$ rm -Rf .git/logs/     (Reflog 삭제)

$ git gc


2. 데이터 복구

$ git log --pretty=oneline

$ git reset --hard 1a410e   (이전 커밋으로 복구)

$ git log -g   혹은   git reflog    (HEAD 가 바뀔 때 마다 저장된 기록을 확인)

$ git branch recover-branch ab1afef   (recover-branch를 만듬)

$ git log --pretty-oneline recover-branch

$ git fsck --full   (길잃은 객체를 찾아 줌,  히스토리 중 2번째 칼럼에서 commit 을 찾음)


0. Git 설정

- Windows Git 설치

   http://code.google.com/p/msysgit


- Git config 적용 순서

   1. $ git config

       .git/config

   2. $ git config --global

       ~git/.gitconfig

   3. $ git config --system

       /etc/gitconfig


- Git config 로 조회될 때 중복되어 있으면 나중에 나오는 값이 적용된다.

   $ git config --list


- config 값이 중복될 때 어떤 값이 적용되는지 볼 수 있음

   $ git config <Key이름>


- config 관련 help 보기

   $ git help config


1. 상태 변화

    ※ 신규파일이든 수정한 파일이든 모두 add 해야 한다.

       생성하거나 수정하고 나서 git add 명령으로 추가하지 않은 파일은 commit 하지 않는다.

- 신규 파일을 생성한 경우 : Untracked (Untracked files)

- 신규 파일을 add 한 경우 : Untracked -> Tracked and Staged (Changed to be committed)

   $ git add <file or directory>


- 기존 파일을 수정한 경우 : Tracked and Unstage (Changed but not updated)

- 기존 수정된 파일을 add 한 경우 : Tracked and Unstage -> Staged (Changed to be committed)

   $ git add <file or directory>


- 상태의 변화

   (Untracked : 신규)              (Tracked)

   (Tracked    : 수정)              (Tracked)

    Unstage               -->         Staged          -->         Committed         -->        Remote Repository

                           (git add)                  (git commit)                      (git push)

 

2. 상태 변경 내용 보기

- Staged 와 Unstage (워킹 디렉토리) 상태의 변경 내용 보기

   $ git diff


- Staged 와 Committed (저장소) 상태의 변경 내용 보기

   $ git diff --staged


3. Staged 상태 커밋하기

$ git commit


4. Staging Area 파일 삭제하기

- 워킹디렉토리 파일을 삭제하고 Staged 파일을 삭제한다.

   $ rm <file>

   $ git rm <file>


- Staged 와 워킹 디렉토리 파일 모두 삭제한다.

  $ git rm <file or directory>


- Staged 파일은 삭제하고 워킹 디렉토리 파일은 남겨둔다.

   $ git rm --staged(or cached) <file or directory>


5. 커밋 히스토리 조회하기

- log는 히스토리를 보여주며 -p는 diff 결과를 보여주고 -2는 최근 두 개의 결과만 보여준다

   $ git log -p -2


- since 나 until 을 사용할 수 있다.

   $ git log --since=2.weeks

   $ git log --since="2013-01-01"


- author 나 grep 을 사용할 수 있다.

   $ git log --author="stephen" --grep="local storage"


- 로그를 옵션으로 볼 수 있다.

   $ git log --pretty=oneline (short, full, fuller)


- 로그를 특정 포맷으로 볼 수 있다. (h:hash, an: author name, ad: author date, s: subject)

   $ git log --pretty=format:"%h %s" --graph


- 수정한 파일, 추가된 줄, 삭제된 줄만 표시

   $ git log --shortstat


- 수정된 파일의 목록과 파일을 추가한 것인지, 수정한 것인지, 삭제한 것인지 보여준다

   $ git log --name-status


- HEAD 가 가리켰던 커밋을 조회하기

   $ git reflog

   $ git log -g master


- master 에는 없지만 local-storage 에는 있는 커밋 조회

   $ git log master..local-storage


- 리모트 저장소 master 에는 없고 현재의 브랜치에만 있는 커밋

   $ git log origin/master..HEAD


- git log graph 로 보기

   $ vi ~/.gitconfig


[alias]

lg1 = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)\

%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)\

- %an%C(reset)%C(bold yellow)%d%C(reset)' --all

lg2 = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)\

%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)\

%C(bold yellow)%d%C(reset)%n''          %C(white)%s%C(reset) %C(dim white)\

- %an%C(reset)' --all

lg = !"git lg1"


6. 되돌리기

- 커밋 한 후 빠진 파일을 다시 포함시키거나, 커밋 메세지를 수정할 때, 커밋을 합치고 싶을 때 마지막 커밋으로 모두 덮어쓴다.

   $ git commit --amend


- Staged 상태 파일을 Unstage (워킹 디렉토리에만 수정된 상태)로 되돌리기

   $ git reset HEAD <file>


- Unstage (워킹 디렉토리에만 수정된 상태)를 Commit (저장소)와 동일한 초기 상태로 되돌리기

   $ git checkout -- <file>


- 커밋을 취소하기 

   $ git reset HEAD^            최종 커밋을 취소, 워킹 디렉토리를 보존

   $ git reset HEAD~2          마지막 2개의 커밋을 취소, 워킹 디렉토리를 보존

   $ git reset --hard HEAD~2 마지막 2개의 커밋을 취소, 워킹 디렉토리와 Staged 모두 취소

   $ git reset --hard ORIG_HEAD    머지한 것을 커밋했을 때 취소

   $ git revert HEAD        커밋을 push 했을 때 HEAD에 변경한 내용을 취소하는 커밋 추가 


7. 리모트 저장소

- 리모트 저장소 리스트 보기, Clone 으로 가져온 저장소의 이름은 origin 으로 자동으로 붙혀진다.

   $ git remote -v


- 리모트 저장소 추가하기

   $ git remote add <리모드 저장소 별명> <URL>


- 리모트 저장소의 브랜치 포인터를 로컬로 가져오기

   fetch 는 실제 데이터를 가져오는 것이 아니라 리모트 브랜치에 대한 모든 정보를 가져와 포인터가 생기는 것

   $ git fetch <리모트 저장소 별명>


- 리모트 저장소 Branch 의 데이터를 가져와서 자동으로 로컬에 머지하기

   $ git pull <리모트 저장소 별명> <리모트 브랜치 이름>:<로컬 브랜치 이름>


- 리모트 저장소에 브랜치 데이터를 올리기

   $ git push <리모트 저장소 별명> <로컬 브랜치 이름>:<리모트 저장소 브랜치 이름>

   $ git push


- 로컬의 local-storage 브랜치를 리모트 저장소 origin 에 storage 브랜치라는 이름으로 올리기

   $ git push origin local-storage:storage


- 리모트 저장소 상세보기

   push 할 때 와 pull 할 때 어떤 브랜치로 작동하는지 보여준다.

   $ git remote show <리모트 저장소 별명>


- 리모트 저장소 이름 바꾸기

   $ git remote rename <현재 이름> <바꿀 이름>


- 리모트 저장소 삭제하기

   $ git remote rm <리모트 저장소 별명>


8. 태그

- 태그 조회하기

   $ git tag


- 1.x 버전의 태그를 조회하기

   $ git tag -l '1.*'


- 태그 1.1 붙히기

   $ git tag 1.1


- 특정 commit 에 대해서 태그 붙히기

   $ git tag -a 1.1 <체크섬>


- 리모트 저장소에 태그 데이터 올리기

   $ git push <리모트 저장소 별명> <태그 이름>


- 리모트 저장소에 모든 태그를 올리기

   $ git push <리모트 저장소 별명> --tags


9. 브랜치

- HEAD 는 현재 작업하는 로컬 branch 를 가리키는 포인터


- 브랜치 생성하기

   $ git branch local-storage


- 생성한 브랜치로 이동하기

   $ git checkout local-storage


- 브랜치를 만들고 생성한 브랜치로 이동하기

   $ git checkout -b local-storage


- checkout 으로 브랜치를 바꾸면 워킹 디렉토리의 파일들을 추가, 삭제, 수정하여 이전 스냅샷으로 돌린다.


- 브랜치 삭제하기 (Merge 하지 않은 브랜치는 삭제되지 않음)

   $ git branch -d local-storage


- 브랜치 삭제하기 (Merge 하지 않은 브랜치도 강제로 삭제하기)

   $ git branch -D local-storage


- 브랜치 리스트 조회하기

   $ git branch


- 브랜치 리스트에 마지막 커밋 메세지까지 조회하기

   $ git branch -v


- 현재의 브랜치에 Merge 하지 않은 브랜치 보기

   $ git branch --no-merged


- 리모트 저장소의 브랜치를 로컬 브랜치로 Tracking 하여 생성하기 (둘 중 하나를 사용)

   $ git checkout -b local-storage origin/local-storage

   $ git checkout --track origin/local-storage


- 리모트 브랜치 삭제하기 (리모트의 local-storage 라는 브랜치 삭제)

   $ git push origin :local-storage


9. Merge 하기

- Merge 하기 위해서는 중심이 되는 브랜치로 이동 후 합친다. (여기서 master 에 local-storage를 합치기)

   $ git checkout master

   $ git merge local-storage


- 리모트 저장소의 브랜치를 로컬의 현재 브랜치에 합치기 (여기서는 master 에 리모트 local-storage를 합치기)

   $ git checkout master

   $ git merge origin/local-storage


- Merge 시 Conflict 발생하면 상태를 확인

   $ git status


- 리모트 저장소의 master 가 수정되었을 때 로컬 master 와 Merge 하기

   $ git fetch origin

   $ git merge origin/master


- 브랜치 (local-storage)를 만든 후 리모트 저장소의 master 가 변경되고, 브랜치에서 개발 한 후 리모트 master 와 브랜치 commit 차이를 보고 Merge 하기 ( Merge 는 브랜치든 master든 둘 중 아무거나 먼저한다.)

   $ git fetch origin

   $ git log --no-merges origin/master ^local-storage


   $ git checkout master

   $ git merge local-storage

   $ git merge origin/master 


10. Rebase 하기

      ※ 리모트 저장소에 Push 한 내용을 Rebase 하면 안된다.

- Rebase 하기 위해서는 개발한 브랜치로 이동 후 중심이 되는 브랜치로 rebase 한다.

  (여기서는 local-branch 에서 개발하는 중간에 master 에 최신 내용들을 local-branch 에 합친다)

   $ git checkout local-branch

   $ git rebase master


- Master 에서 브랜치 (local-storage)를 만들고, 또 여기서 추가로 브랜치 (storage)를 만들어 storage 브랜치를 먼저 rebase 하고 local-storage 를 rebase 한다.

   $ git rebase --onto master local-storage storage

   $ git checkout master

   $ git merge storage


   $ git rebase master local-storage

   $ git checkout master

   $ git merge local-storage








반응형
Posted by seungkyua@gmail.com
,
반응형

1. Dictionary 안에 Dictionary 가져올 때

scheduler_hints = filter.properties.get('scheduler_hints') or {}

group = scheduler_hints.get('group', None)


or


if snapshot:

    try:

        availability_zone = snapshot['volume']['availability_zone']

    except (TypeError, KeyError):

        pass


2. Dictionary arguments 로 부터 가져올 때

execute(self, context, **kwargs):

    scheduler_hints = kwargs.pop('scheduler_hints', None)


3. exception 처리

try:

    ...

    return {

        'reservation': reservations,

    }

except exception.OverQuota as e:

    overs = e.kwargs['overs']

    quotas = e.kwargs['quoata']

    if _is_over('gigabytes'):

        msg = _(Quota exeeded for %(s_pid)s.")

        LOG.warn(msg % {'s_pid : context.project_id})

        raise exception.VolumeSizeExeedsAvailableQuota(

            requested=zise)

    elif _is_over('volumes'):

        raise exception.VolumeLimitExceeded(allowed=quotas['volumes'])

    else:

        raise


4. package 아래 특정 파일을 default 로 지정하는 방법

[ package 구조 ]

-- cinder

    -- db

        -- __init__.py

        -- api.py

        -- base.py


db 아래의 api.py 의 quota_get() function 을 호출하고자 할 때


cinder/db/__init__.py 에 다음과 같이 설정

from cinder.db.api import *


사용하고자 하는 파일에서 다음과 같이 사용

from cinder import db

...

db.quata_get()


혹은

[ package 구조 ]

-- nova

    -- virt

        -- libvirt

            -- __init__.py

            -- driver.py    (여기에 LibvirtDriver 클래스를 사용하고자 함)

            -- vif.py


nova/virt/libvirt/__init__.py 에 다음과 같이 설정

from nova.virt.libvirt import driver

LibvirtDriver = driver.LibvirtDriver


이렇게 설정하면 nova.virt.libvirt.LibvirtDriver 클래스를 읽어들어서 사용할 수 있음


5. dictionary 가 null 일 수 있을 때 null 을 회피하고 기본{} 값을 넣는 법

migrate_data = dict(migrate_data or {})


6. set 기본값 생성

block_device_mapping = set()


7. String 합치기, String 좌우 스페이스를 없애기

import_value = "%s.%s" % (name_space, import_str)

s = s.strip()


8. String 을 특정 delemeter 로 우측 string 을 구분하기, String 을 delemeter로 구분하여 List 에 담기

mod_str, _sep, class_str = import_str.rpartition('.')

flaglist = CONF.libvirt.live_migration_flag.split(',')


9. class 나 function 자체를 변수에 넣고 사용하고 싶을 때

getattr(import 모듈경로, 클래스명)   => .py 파일에 class 가 있을 때

getattr(import 모듈경로, 함수명)      => .py 파일에 def 함수가 바로 있을 때


__import__('nova.virt.libvirt')            => 모듈을 import

class_LibvirtDriver = getattr(sys.modules['nova.virt.libvirt'], 'LibvirtDriver')    +. 클래스를 로딩하여 리턴


10. xml 파싱

from lxml import etree


doc = etree.fromstring(xml)

disk_nodes = doc.findall('.//devices/disk')


11. list 를 순번과 값으로 순차적으로 가져오기

for cnt, path_node in enumerate(['a', 'b'])

print cnt

print path_node



12. list 를 Json string 으로 만들기

from nova.openstack.common from jsonutils


disk_info = []

disk_info.append({'type': 'block',

                          'path': '/dev/disk/by-path/ip-192.168.230.136:3260-iscsi-iqn.2010-10.org.openstack:volume-1000de04-6603-41d8-bae4-7bc16af0bc15-lun-1',

                          'virt_disk_size': 0,

                          'backing_file': '',

                          'over_committed_disk_size': 0})

disk_info = jsonutils.dumps(disk_info)


13. Class 를 Json String 으로 만들기

from nova.openstack.common from jsonutils


instance = jsonutils.to_primitive(instance)


14. 리스트의 내용을 조건절로 걸러내고 새로운 리스트에 담기

bdms = [bdm.legacy() for bdm in block_device_mapping if _has_legacy(bdm)]


15. 로직 중간에 새로운 쓰레드 생성하기

from eventlet import greenthread


greenthread.spawn(self._live_migration, context, instance, dest .......)


def _live_migration(self, context, instance, dest .......)


16. list 의 값을 하나의 string 으로 만들기

cmd = ('ssh', 'host')

cmd = ' '.join(cmd)






반응형
Posted by seungkyua@gmail.com
,
반응형

[ 사전 준비 ]

openstack.org 에 open id 로 접속

review.openstack.org 의 settings 에서 등록해야 할 내용

1. Profile >> Username

      - gerrit review 시에 등록할 username 값

    Profile >> Full Name, Email Address

      - git config 에 등록할 user.name, user.email 값

2. SSH Public Keys

    -> ssh public keys 를 등록

3. Agreements

    -> Contributor Agreement 등록


# clone a project (nova)
git clone git://github.com/openstack/nova.git

-> DevStack 으로 설치했다면 /opt/stack/nova 에 git 으로 clone 되어 있음

# port 확인 (브라우저에서 확인)
https://review.openstack.org/ssh_info

# Testing Gerrit Connections
ssh -p 29418 StephenAhn@review.openstack.org

# Setting username
git config --global --add gitreview.username "StephenAhn"

# gerrit 단축 경로 저장
vi ~/.ssh/config
Host review
  Hostname review.openstack.org
  Port 29418
  User StephenAhn

# gerrit remote 확인 및 change-id 자동 세팅 설정
git review -s

# gerrit remote 확인 시 에러나면 remote 추가
git remote add gerrit ssh://StephenAhn@review.openstack.org:29418/openstack/nova.git

# 최신 소스로 다운받기 (DevStack 의 경우 /opt/stack/nova 디렉토리에서)
git remote update
git checkout master
git pull --ff-only origin master

# blueprint 채널 생성 (blueprint 명이 local-storage-volume-scheduling 임)
git checkout -b bp/local-storage-volume-scheduling

# .mailmap 에 본인 email 추가 (여러 개의 이메일도 가능)
vi .mailmap
    <skanddh@gmail.com> <xxx@xxx.com>

# commit message 입력
git commit --amend

첫번째 라인은 50자 이내로 간단히 요약을 쓴다.
[공백라인]
설명을 적되 라인은 72자가 넘어가면 다음 라인에 쓴다.
.....

Add volume retype to Cinder client.
Cinder code: https://review.openstack.org/#/c/44881/

DocImpact
Implements: blueprint local-storage-volume-scheduling

Change-Id 는 자동으로 지정되므로 적지 않는다.

[ Commit message에 추가해야 할 내용 ]
DocImpact             -> 도큐먼트가 바껴야 할 때 넣음
SecurityImpact      -> 보안 문제가 있으니 OpenStack Secrurity Group 에서 
                                review해야 할 때 넣음
UpgradeImpact      -> 업그레이드에 영향을 미치는 경우 넣음
                                 (release notes 의 'Upgrade Notes' section 수정을 고려)

# git review 등록 (샘플 이외에 셋 중 아무거나 쓰면 됨)
# 샘플 양식
git push ssh://StephenAhn@review.openstack.org:29418/<Project Name> HEAD:refs/for/<Branch Name>

git push ssh://StephenAhn@review.openstack.org:29418/openstack/cinder HEAD:refs/for/bp/local-storage-volume-scheduling
git push review:openstack/cinder HEAD:refs/for/bp/local-storage-volume-scheduling
git review


[ unit test 수행을 위한 패키지 다운로드 ]
sudo apt-get install python-dev libssl-dev python-pip git-core libmysqlclient-dev libpq-dev
sudo apt-get install libxml2-dev libxslt-dev libvirt-dev
sudo apt-get install python-virtualenv testrepository

[ nova unit test ]
cd /opt/stack/nova
./run_tests.sh

# pep8 코딩 표준 테스트
./run_tests.sh -p

# netaddr>=0.7.6 에서 에러 발생 시
$ source .venv/bin/activate
$ wget https://github.com/downloads/drkjam/netaddr/netaddr-0.7.9.zip
$ unzip netaddr-0.7.9.zip
$ cd netaddr-0.7.9
$ python setup.py install

# ubuntu 12.04 에서 libvirt-python 1.2.5 설치 시 에러
ubuntu 12.04 에서는 libvirt 0.9.8 이 기본이므로 libvirt 1.2.0 으로 업그레이드 해야함
$ sudo apt-get update
sudo apt-get -y install \
    gcc \
    make \
    pkg-config \
    libxml2-dev \
    libgnutls-dev \
    libdevmapper-dev \
    libcurl4-gnutls-dev \
    python-dev \
    libpciaccess-dev \
    libxen-dev \
    libyajl-dev \
    libnl-dev

sudo mkdir -p /opt/libvirt
$ sudo chmod 00755 /opt/libvirt
$ sudo chown root:root /opt/libvirt
$ sudo chmod a+w /opt/libvirt
$ cd /opt/libvirt
$ wget http://libvirt.org/sources/libvirt-1.2.0.tar.gz
$ tar xzvf libvirt-1.2.0.tar.gz
$ mv libvirt-1.2.0 libvirt
$ cd libvirt
./configure \
    --prefix=/usr \
    --localstatedir=/var \
    --sysconfdir=/etc \
    --with-esx=yes \
    --with-xen=yes
$ make -j
$ sudo make install

$ ./run_tests.sh


# git review 시 권한이 없다는 메세지가 올 때 해결방법
git review

"fatal: ICLA contributor agreement requires current contact information.
Please review your contact information:
  https://review.openstack.org/#/settings/contact

fatal: The remote end hung up unexpectedly"

1. https://review.openstack.org/#/settings/contact 사이트에 접속
2. Contack information 중 아래의 Mailing Address Country, Phone Number, Fax Number 입력
3. "Contact information last updated on 날짜." 가 중간에 보이면 정상적으로 처리되었음
4. git review 실행




반응형
Posted by seungkyua@gmail.com
,
반응형

1. Linux 의 경우 커널에 포함되어 있는 kvm-clock 을 사용하여 Host 머신과 동기화


2. Windows 의 경우 kvm-clock 이 제공되지 않으므로 다음 두가지를 활용하여 동기화

     - RTC (Real Time Clock)

        bcdedit /set {default} USEPLATFORMCLOCK on


        <clock offset='localtime'>

            <timer name='rtc' tickpolicy='catchup' track='guest'/>
            <timer name='pit' tickpolicy='delay'/>
            <timer name='hpet' present='no'/>
         </clock>


     - TSC(Time Stamp Counter)


반응형
Posted by seungkyua@gmail.com
,
반응형

마우이는 크게

  1. 몰로니키 스노쿨링
  2. 라하이나
  3. 할레아칼라 일출
  4. 블랙락 및 여러 해변 or 호텔 수영장 놀이. 정도 되겠습니다.

오하우는

  1. 섬일주(사우스 쇼어, 노스 쇼어 각 포인트 투어)
  2. 레져(해양스포츠)
  3. 와이키키 등 해변 해수욕
  4. 쿠알로아 목장 레져(승마, ATV 등)
  5. 하나우마베이 스노쿨링
  6. 다이아몬드헤드 트레킹, 코코헤드 트레킹, 마카푸우 등대 트레킹
  7. 와이켈레 프리미엄 아울렛, 알라모아나 쇼핑센터 쇼핑투어



1. 바다 카약 투어

    http://www.kailuasailboards.com/


2. 해양 파크

   http://www.sealifeparkhawaii.com/directions.asp


3. Hanauma Bay

    06:00 ~ 19:00  화요일 휴무


(노스쇼어)

4. 바다거북 해변 Laniakea Beach


반응형
Posted by seungkyua@gmail.com
,
반응형

DevOn 2013 에서 OpenStack 에 관한 발표자료입니다.


OpenStack-Overview.pdf



반응형
Posted by seungkyua@gmail.com
,
반응형
DevStack 으로 neutron 포함 설치시 방법을 공유합니다.

OS 는 Ubuntu Desktop 12.04 LTS 버전입니다.

* 최신 2014 2월 trunk 버전에서는 nova/virt/libvirt/driver.py 에서 python-libvirt 1.0.2+ 이상만 지원하므로 에러가 발생합니다. 
Ubuntu 최신 버전을 설치하세요. 

네트워크 세팅은 다음과 같습니다.

[ Single Node or Multi Node 의 경우 Controller Node 와 Compute Node 역활을 함 ]
eth0 : NAT type         192.168.75.136       Public Network
eth1 : Host-only type 192.168.230.136     Private Network

[ Multi Node 의 경우 두번째 추가 Compute Node ]
eth0 : NAT type         192.168.75.137       Public Network
eth1 : Host-only type 192.168.230.137     Private Network

[ User 선택 ]
stack 유저로 생성

[ visudo 세팅 ]
stack   ALL=(ALL:ALL) NOPASSWD:ALL

[ vi /etc/network/interfaces ]
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
        address 192.168.75.136
        netmask 255.255.255.0
        gateway 192.168.75.2
        dns-nameservers 8.8.8.8 8.8.4.4

auto eth1
iface eth1 inet static
        address 192.168.230.136
        netmask 255.255.255.0

[ network-manager 제거 ]
sudo apt-get purge network-manager
sudo apt-get autoremove
sudo /etc/init.d/networking restart

[ proxy 사용 -> proxy 세팅 ]
sudo vi /etc/apt/apt.conf
Acquire::http::proxy "http://xx.xx.xx.xx:8080/";
Acquire::https::proxy "https://xx.xx.xx.xx:8080/";

sudo vi /etc/environment
http_proxy="http://xx.xx.xx.xx:8080/"
https_proxy="https://xx.xx.xx.xx:8080/"
no_proxy="ubuntu,localhost,127.0.0.1,192.168.75.136,192.168.230.136"

[ python import 오류 해결 ]
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade

[ git 설치 및 user 세팅, proxy 사용 -> proxy 세팅 ]
sudo apt-get -y install git git-review

git config --global user.name "Stephen Ahn"
git config --global user.email "skanddh@gmail.com"
git config --global http.proxy http://xx.xx.xx.xx:8080
git config --global https.proxy https://xx.xx.xx.xx:8080
git config --list

[ remove dmidecode ]
sudo apt-get install libvirt-bin
sudo apt-get purge dmidecode
kill -9 [dmidecode process]
sudo apt-get autoremove

[ delete default virtual bridge ]
root 로 로그인하여 실행
virsh net-destroy default
virsh net-undefine default

[ Proxy 사용 -> curl 세팅 ]
curl 사용을 위해 crt 파일을 복사하고 xxx.cert 파일을 선택
cp xxx.crt  /usr/share/ca-certificates/extra
dpkg-reconfigure ca-certificates

[ Proxy 사용 -> ~/.pip/pip.conf 세팅 ]
[global]
cert = /usr/share/ca-certificates/extra/xxx.crt
index-url = http://pypi.gocept.com/simple/

[ DevStack clone ]
git clone https://github.com/openstack-dev/devstack.git

[ vi  lib/neutron_plugins/ovs_base ]
gre port 나 patch port 가 생성이 안된다는 q-agt 에러가 발생하면 Kernel 3.5.x-xx-generic 과 openvswitch 1.4.0 호환이 안되는 것이므로 다음과 같이 조치
openvswitch-datapath-dkms 대신 openvswitch-datapath-lts-raring-dkms 를 설치
 41  install_package make fakeroot dkms openvswitch-switch openvswitch-datapath-lts-raring-dkms linux-headers-$kernel_version

[ vi localrc ]
# Devstack localrc for Quantum all in one
# default
HOST_IP=192.168.230.136
SERVICE_HOST=192.168.230.136

# Compute 을 여러대 설치
MULTI_HOST=True

# Private subnet
FIXED_RANGE=10.0.0.0/24

# Nova-network service
#enable_service n-net
#FIXED_NETWORK_SIZE=256
#FLOATING_RANGE=192.168.75.192/26
#FLAT_INTERFACE=eth1
#PUBLIC_INTERFACE=eth0

# Neutron External subnet
NETWORK_GATEWAY=10.0.0.1
FLOATING_RANGE=192.168.75.0/24
PUBLIC_NETWORK_GATEWAY=192.168.75.2
Q_FLOATING_ALLOCATION_POOL=start=192.168.75.193,end=192.168.75.254

# Neutron configuration
Q_PLUGIN=ml2
Q_ML2_PLUGIN_TYPE_DRIVERS=local,flat,vlan,gre,vxlan
Q_ML2_TENANT_NETWORK_TYPE=vxlan
Q_ML2_PLUGIN_VXLAN_TYPE_OPTIONS=(vni_ranges=1001:2000)
Q_AGENT_EXTRA_AGENT_OPTS=(tunnel_types=vxlan vxlan_udp_port=8472)
Q_AGENT_EXTRA_SRV_OPTS=(local_ip=$HOST_IP)
#Q_AGENT=openvswitch
Q_ML2_PLUGIN_MECHANISM_DRIVERS=openvswitch,linuxbridge,l2population
Q_USE_NAMESPACE=True
Q_USE_SECGROUP=True

# Nova service
enable_service n-api
enable_service n-crt
enable_service n-obj
enable_service n-cpu
enable_service n-cond
enable_service n-sch
enable_service n-novnc
enable_service n-cauth

# Cinder service
enable_service cinder
enable_service c-api
enable_service c-vol
enable_service c-sch
enable_service c-bak

# Tempest service
enable_service tempest

# Neutron service
disable_service n-net
enable_service neutron
enable_service q-svc
enable_service q-agt
enable_service q-dhcp
enable_service q-l3
enable_service q-meta
enable_service q-lbaas

# Controller Node
Q_HOST=$SERVICE_HOST

# vnc
VNCSERVER_LISTEN=0.0.0.0
VNCSERVER_PROXYCLIENT_ADDRESS=$HOST_IP

# logs
DEST=/opt/stack
LOGFILE=$DEST/logs/stack.sh.log
SCREEN_LOGDIR=$DEST/logs/screen

# system password
ADMIN_PASSWORD=패스워드
MYSQL_PASSWORD=패스워드
RABBIT_PASSWORD=패스워드
SERVICE_PASSWORD=패스워드
SERVICE_TOKEN=admin

# Cinder configuration
VOLUME_GROUP="cinder-volumes"
VOLUME_NAME_PREFIX="volume-"

# Heat service
enable_service heat
enable_service h-api
enable_service h-api-cfn
enable_service h-api-cw
enable_service h-eng

# Murano service
enable_service murano
enable_service murano-api
enable_service murano-engine

# Ceilometer service
CEILOMETER_BACKEND=mongo
CEILOMETER_NOTIFICATION_TOPICS=notifications,profiler
enable_service ceilometer
enable_service ceilometer-acompute
enable_service ceilometer-acentral
enable_service ceilometer-collector
enable_service ceilometer-api
enable_service ceilometer-alarm-evaluator
enable_service ceilometer-alarm-notifier

# Swift service
enable_service s-proxy
enable_service s-object
enable_service s-container
enable_service s-account

# Trove service
enable_service trove
enable_service tr-api
enable_service tr-tmgr
enable_service tr-cond

# Images
# Use this image when creating test instances
IMAGE_URLS+=",http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img"
# Use this image when working with Orchestration (Heat)
IMAGE_URLS+=",https://download.fedoraproject.org/pub/fedora/linux/releases/23/Cloud/x86_64/Images/Fedora-Cloud-Base-23-20151030.x86_64.qcow2"

KEYSTONE_CATALOG_BACKEND=sql
API_RATE_LIMIT=False
SWIFT_HASH=testing
SWIFT_REPLICAS=1
VOLUME_BACKING_FILE_SIZE=70000M

#scheduler
SCHEDULER=nova.scheduler.filter_scheduler.FilterScheduler

# A clean install every time
#RECLONE=yes


[ Multi Node Compute 세팅 방법 ]
# vi localrc
HOST_IP=192.168.230.137
SERVICE_HOST=192.168.230.136

# Compute 을 여러대 설치
MULTI_HOST=True

# Neutron configuration
Q_PLUGIN=ml2
Q_ML2_PLUGIN_TYPE_DRIVERS=local,flat,vlan,gre,vxlan
Q_ML2_TENANT_NETWORK_TYPE=vxlan
Q_ML2_PLUGIN_VXLAN_TYPE_OPTIONS=(vni_ranges=1001:2000)
Q_AGENT_EXTRA_AGENT_OPTS=(tunnel_types=vxlan vxlan_udp_port=8472)
Q_AGENT_EXTRA_SRV_OPTS=(local_ip=$HOST_IP)
#Q_AGENT=openvswitch
Q_ML2_PLUGIN_MECHANISM_DRIVERS=openvswitch,linuxbridge,l2population
Q_USE_NAMESPACE=True
Q_USE_SECGROUP=True

# RabbitMQ, Compute
disable_all_services
enable_service rabbit
enable_service n-cpu
enable_service n-novnc

Nova-network Service
#enable_service n-net
#FIXED_RANGE=10.0.0.0/24
#FIXED_NETWORK_SIZE=256
#FLOATING_RANGE=192.168.75.192/26
#FLAT_INTERFACE=eth0
#PUBLIC_INTERFACE=eth0

Neutron L2 Service
enable_service neutron
enable_service q-agt

# Cinder service
enable_service cinder

# Cinder configuration
#enable_service c-vol
#VOLUME_GROUP="cinder-volumes"
#VOLUME_NAME_PREFIX="volume-"

# Controller Node
Q_HOST=$SERVICE_HOST
MYSQL_HOST=$SERVICE_HOST
RABBIT_HOST=$SERVICE_HOST

# vnc
VNCSERVER_LISTEN=0.0.0.0
VNCSERVER_PROXYCLIENT_ADDRESS=$HOST_IP

# logs
DEST=/opt/stack
LOGFILE=$DEST/logs/stack.sh.log
SCREEN_LOGDIR=$DEST/logs/screen

# system password
MYSQL_PASSWORD=패스워드
RABBIT_PASSWORD=패스워드

# A clean install every time
#RECLONE=yes

# vi /etc/nova/nova.conf 수정
neutron_admin_password = 패스워드
sql_connection = mysql://root:패스워드@192.168.230.136/nova?charset=utf8

# vi /etc/cinder/cinder.conf 수정
sql_connection = mysql://root:패스워드@192.168.230.136/cinder?charset=utf8
my_ip = 192.168.230.137




[ Murano 설치 ]
$ git clone git://git.openstack.org/openstack/murano
$ cd murano/contrib/devstack
$ cp lib/murano ${DEVSTACK_DIR}/lib
$ cp lib/murano-dashboard ${DEVSTACK_DIR}/lib
$ cp extras.d/70-murano.sh ${DEVSTACK_DIR}/extras.d


[ Heat OSprofiler enabled ]
$ echo -e "[profiler]\nprofiler_enabled = True\ntrace_sqlalchemy = True\n" >> /etc/heat/heat.conf

$ heat --profile SECRET_KEY stack-list
# it will print <Trace ID>

osprofiler trace show --html <Trace ID>


[ vi  localrc ]
git 프로토콜로 다운로드가 안될 경우 http 로 변경
GIT_BASE=http://git.openstack.org

[ devstack 설치 ]
./stack.sh


[ tempest 에러 시 해결 ]
$ wget https://pymox.googlecode.com/files/mox-0.5.3.tar.gz
$ tar xvf mox-0.5.3.tar.gz
$ cd mox-0.5.3
$ sudo python setup.py install

$ vi ~/.pydistutils.cfg
[easy_install]
index_url =  http://mirror.dfw.rax.openstack.org/pypi/simple
allow_hosts = *.openstack.org




[ public 연결 세팅 - Neutron ]
br-ex 에 gateway 192.168.75.2 가 추가되어 public ip 통신이 안되므로 삭제
VM과 외부 external 을 연결할려면 add-port 를 수행, 단 이렇게 하면 host 에서 외부연결이 안됨
sudo ip link set up br-int
sudo ip link set up br-tun
sudo ip addr del 192.168.75.2/24 dev br-ex
sudo ovs-vsctl add-port br-ex eth0
#ifconfig br-ex promisc up

[ host 와 인터넷 연결 세팅 - Neutron ]
host 에서 인터넷 연결을 할려면 del-port 를 수행
sudo ovs-vsctl del-port eth0

[ public 연결 세팅 - nova-network ]
eth1 의 host-only 네트워크에 대한 dhcp 를 끈다. 이걸 안끄면 vm 생성 시 내부 ip 가 192.168.230.x 대역을 받음
br100 은 eth1 내부 네트워크와만 연결되어야 하므로 br100 과 eth0 연결을 끊는다.
br100 이 eth0 로 부터 가져온 외부 네트워크 ip 는 eth0 에 돌려준다.
sudo brctl show br100
sudo brctl delif br100 eth0
sudo ip addr del 192.168.75.136/24 dev br100
sudo ip addr add 192.168.75.136/24 dev eth0

[ default gateway 수정 - nova-network ]
sudo route del -net 0.0.0.0/0 gw 192.168.208.2 dev br100
sudo route add -net 0.0.0.0/0 gw 192.168.208.2 dev eth0

[ cinder.conf  수정 - 메세지 호출을 위해서 ]
notification_driver=messagingv2


[ cli 호출 ]
. openrc admin demo

[ 서비스 start ]
screen -c stack-screenrc


[ default sec group rule 추가 ]
openstack security group rule create --proto icmp --src-ip 0.0.0.0/0 --dst-port -1 --ingress 5f7fe4ab-7069-490e-b95d-946a0148e523

openstack security group rule create --proto tcp --src-ip 0.0.0.0/0 --dst-port 1:65535 --ingress 5f7fe4ab-7069-490e-b95d-946a0148e523

[ nova boot ]
nova boot --flavor m1.tiny --image 32dc6f3e-83fc-4b18-ba08-c06a28bdac38 --nic net-id=7fa105b5-fcc7-4ce9-abbe-c49b867bb0b3  --key-name magnum-key --security-groups 6b84dbca-3e20-4ce5-9774-9c3128a2eb5f test-01


sudo ip netns
qrouter-0e8971de-9119-4bed-9c70-288a0ed15581
qdhcp-7fa105b5-fcc7-4ce9-abbe-c49b867bb0b3


[ vi stopnova.sh ]
서비스를 내리기 위해서 shell 작성
#!/bin/bash

rm -rf /opt/stack/status/stack/*

cd /usr/local/bin
for i in $( ls nova-* )
    do sudo kill -9 `ps aux | grep -v grep | grep $i  | awk '{print $2}'`
done

for i in $( ls cinder-* )
    do sudo kill -9 `ps aux | grep -v grep | grep $i  | awk '{print $2}'`
done

for i in $( ls keystone-* )
    do sudo kill -9 `ps aux | grep -v grep | grep $i  | awk '{print $2}'`
done

for i in $( ls glance-* )
    do sudo kill -9 `ps aux | grep -v grep | grep $i  | awk '{print $2}'`
done

for i in $( ls heat* )
    do sudo kill -9 `ps aux | grep -v grep | grep $i  | awk '{print $2}'`
done

for i in $( ls ceilometer* )
    do sudo kill -9 `ps aux | grep -v grep | grep $i  | awk '{print $2}'`
done

for i in $( ls trove* )
    do sudo kill -9 `ps aux | grep -v grep | grep $i  | awk '{print $2}'`
done

for i in $( ls neutron* )
    do sudo kill -9 `ps aux | grep -v grep | grep $i  | awk '{print $2}'`
done

for i in $( ls ovs* )
    do sudo kill -9 `ps aux | grep -v grep | grep $i  | awk '{print $2}'`
done


[ devstack 초기화 ]
./unstack.sh
./stopnova.sh

# 컴파일 소스 초기화
cd /opt/stack
find -name "*.pyc" | xargs rm

# VM 초기화
sudo rm -rf /etc/libvirt/qemu/inst*
sudo virsh list | grep inst | awk '{print $1}' | xargs -n1 virsh destroy

# br-tun 삭제
sudo ip link set dev br-tun down
sudo ovs-vsctl del-br br-tun

# vxlan device 삭제
sudo ip link delete dev vxlan_sys_4789

./clean.sh --all (필요시)
sudo apt-get purge mysql-server  (필요시)
sudo apt-get autoremove    (필요시)


[ 설치된 패키지 지우기 ]
# cd /usr/local/lib/python2.7/dist-packages
find -depth -maxdepth 1 -name "*swift*" | xargs sudo rm -rf


[ swift 가 실행안되는 오류 해결방안 ]
해당 포트로 떠 있는 프로세스를 찾아 죽인다.
netstat -apn | grep 6011
netstat -apn | grep 6012
netstat -apn | grep 6013       swift object server


[ cinder volume 없을 경우 새로 생성 ]
$ cd /opt/stack/data

$ sudo losetup -a
$ file /opt/stack/data/cinder-volumes-lvmdriver-1-backing-file

$ dd if=/dev/zero of=cinder-volumes-lvmdriver-1-backing-file bs=1 count=0 seek=10G ( 원하는 용량)
$ sudo losetup /dev/loop2 cinder-volumes-lvmdriver-1-backing-file
$ sudo fdisk /dev/loop2
#Type in the followings:
n
p
1
ENTER
ENTER
t
8e
w

$ sudo pvcreate /dev/loop2
$ vgcreate cinder-volumes-lvmdriver-1 /dev/loop2


[ br-tun, br-ex, br-int 가 ip a 로 안보일 때 ]
openvswitch restart 시킴
$ sudo service openvswitch-switch restart


[ Glance Image 가 DB 에는 보이나 file 이 Upload 되지 않았을 때 ]
$ sudo losetup -a

/dev/loop0: [2049]:1733858 (/opt/stack/data/swift/drives/images/swift.img)

/dev/loop1: [2049]:1733859 (/opt/stack/data/cinder-volumes-default-backing-file)

/dev/loop2: [2049]:1733860 (/opt/stack/data/cinder-volumes-lvmdriver-1-backing-file)


# swift 스토리지 마운트

$ sudo mount -t xfs -o loop,noatime,nodiratime,nobarrier,logbufs=8 /opt/stack/data/swift/drives/images/swift.img /opt/stack/data/swift/drives/sdb1


$ sudo losetup /dev/loop1 /opt/stack/data/cinder-volumes-default-backing-file
$ sudo losetup /dev/loop2 /opt/stack/data/cinder-volumes-lvmdriver-1-backing-file



# swift 스토리지 생성
$ mkfs.xfs -f -i size=1024 /opt/stack/data/swift/drives/images/swift.img

# image 가 없으면 image 업로드
$ . openrc
$ ./tools/upload_image.sh http://download.cirros-cloud.net/0.3.1/cirros-0.3.1-x86_64-uec.tar.gz

[ 서버가 뜰 때 자동으로 cinder-volume, swift 자동으로 연결하기 ]
$ sudo vi /etc/init.d/init-devstack

#! /bin/sh
### BEGIN INIT INFO
# Provides:          init-devstack
# Required-Start:
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Execute bind storage.
# Description:
### END INIT INFO

PATH=/sbin:/usr/sbin:/bin:/usr/bin

case "$1" in
  start)
    losetup /dev/loop1 /opt/stack/data/cinder-volumes-backing-file
    mount -t xfs -o loop,noatime,nodiratime,nobarrier,logbufs=8 /opt/stack/data/swift/drives/images/swift.img /opt/stack/data/swift/drives/sdb1
    ;;
  restart|reload|force-reload)
    echo "Error: argument '$1' not supported" >&2
    exit 3
    ;;
  stop)
    echo "Error: argument '$1' not supported" >&2
    exit 3
    ;;
  *)
    echo "Usage: $0 start" >&2
    exit 3
    ;;
esac

$ sudo  update-rc.d init-devstack defaults


[ nova-compute LOG 를 파일로 떨어뜨리고 싶을 때 ]
cd /opt/stack/nova && nohup /usr/local/bin/nova-compute > /opt/stack/logs/screen/nova-compute.log 2>&1 &



[ Ubuntu Server 14.04 Image Upload ]
이름 : Ubuntu Server 14.04 64-bit
경로 : http://uec-images.ubuntu.com/releases/14.04.2/14.04.2/ubuntu-14.04-server-cloudimg-amd64-disk1.img
포맷 : QCOW2 - QEMU Emulator
최소 디스크 : 5
최소 RAM : 1024

./tools/upload_image.sh http://uec-images.ubuntu.com/releases/14.04.2/14.04.2/ubuntu-14.04-server-cloudimg-amd64-disk1.img

glance image-update --min-disk 5 --min-ram 1024 5f1949a1-60da-475d-83a3-a4f49be35d77

아래 사이트 이미지 참고
http://cloud-images.ubuntu.com/lucid/current/lucid-server-cloudimg-amd64-disk1.img (Ubuntu Server 10.04 64-bit)
https://help.ubuntu.com/community/UEC/Images
http://uec-images.ubuntu.com/releases/


[ Source Contribution 방법 ]

# clone a project
git clone git://github.com/openstack/nova.git

# port 확인 (브라우저에서 확인)
https://review.openstack.org/ssh_info

# Testing Gerrit Connections
ssh -p 29418 StephenAhn@review.openstack.org

# Setting username
git config --global --add gitreview.username "StephenAhn"

# 단축 경로 저장
vi ~/.ssh/config
Host review
  Hostname review.openstack.org
  Port 29418
  User StephenAhn

# gerrit remote 확인
git review -s

# gerrit remote 확인 시 에러나면 remote 추가
git remote add gerrit ssh://StephenAhn@review.openstack.org:29418/openstack/nova.git

# 최신 소스로 다운받기
git remote update
git checkout master
git pull --ff-only origin master

# blueprint 채널 생성
git checkout -b bp/local-storage-volume-scheduling

# .mailmap 에 본인 email 추가
vi .mailmap
    <skanddh@gmail.com> <seungkyu.ahn@samsung.com>

# commit message 입력
git commit --amend

첫번째 라인은 50자 이내로 간단히 요약을 쓴다.
[공백라인]
설명을 적되 라인은 72자가 넘어가면 다음 라인에 쓴다.
.....
Implements: blueprint local-storage-volume-scheduling

Change-Id 는 자동으로 지정되므로 적지 않는다.

# git review 등록 (샘플 이외에 셋 중 아무거나 쓰면 됨)
# 샘플 양식
git push ssh://StephenAhn@review.openstack.org:29418/<Project Name> HEAD:refs/for/<Branch Name>

git push ssh://StephenAhn@review.openstack.org:29418/openstack/cinder HEAD:refs/for/bp/local-storage-volume-scheduling
git push review:openstack/cinder HEAD:refs/for/bp/local-storage-volume-scheduling
git review

# 아래 두 명령어가 같은 내용임
ssh -p 29418 review.openstack.org gerrit ls-projects
ssh review gerrit ls-projects



[ unittest 수행 ]
sudo apt-get install python-dev libssl-dev python-pip git-core libmysqlclient-dev libpq-dev
sudo apt-get install libxml2-dev libxslt-dev libvirt-dev
sudo apt-get install python-virtualenv testrepository


[ nova unit test ]
cd /opt/stack/nova
./run_tests.sh

# pep8 코딩 표준 테스트
./run_tests.sh -p

# netaddr>=0.7.6 에서 에러 발생 시
$ source .venv/bin/activate
$ wget https://github.com/downloads/drkjam/netaddr/netaddr-0.7.9.zip
$ unzip netaddr-0.7.9.zip
$ cd netaddr-0.7.9
$ python setup.py install

# ubuntu 12.04 에서 libvirt-python 1.2.5 설치 시 에러
ubuntu 12.04 에서는 libvirt 0.9.8 이 기본이므로 libvirt 1.2.0 으로 업그레이드 해야함
$ sudo apt-get update
sudo apt-get -y install \
    gcc \
    make \
    pkg-config \
    libxml2-dev \
    libgnutls-dev \
    libdevmapper-dev \
    libcurl4-gnutls-dev \
    python-dev \
    libpciaccess-dev \
    libxen-dev \
    libyajl-dev \
    libnl-dev

sudo mkdir -p /opt/libvirt
$ sudo chmod 00755 /opt/libvirt
$ sudo chown root:root /opt/libvirt
$ sudo chmod a+w /opt/libvirt
$ cd /opt/libvirt
$ wget http://libvirt.org/sources/libvirt-1.2.0.tar.gz
$ tar xzvf libvirt-1.2.0.tar.gz
$ mv libvirt-1.2.0 libvirt
$ cd libvirt
./configure \
    --prefix=/usr \
    --localstatedir=/var \
    --sysconfdir=/etc \
    --with-esx=yes \
    --with-xen=yes
$ make -j
$ sudo make install

$ ./run_tests.sh

[ 단위 모듈로 테스트 하기 ]
To run the tests in the cinder/tests/scheduler directory:
./run_tests.sh scheduler

To run the tests in the cinder/tests/test_libvirt.py file:
$ ./run_tests.sh test_libvirt

To run the tests in the HostStateTestCase class in cinder/tests/test_libvirt.py:
$ ./run_tests.sh test_libvirt.HostStateTestCase

To run the ToPrimitiveTestCase.test_dict test method in cinder/tests/test_utils.py:
$ ./run_tests.sh test_utils.ToPrimitiveTestCase.test_dict


[ tempest 테스트 ]

# 옛날 방식 
$ cd /opt/stack/tempest
$ nosetests tempest/scenario/test_network_basic_ops.py


# 최신 방식
$ cd /opt/stack/tempest
$ ostestr    혹은   testr


$ git clone https://github.com/openstack/tempest/
$ pip install tempest/
$ cd tempest
$ tempest init cloud-01
$ cd cloud-01
$ cp -r /opt/stack/tempest/etc/ .
$ ../run_tempest.sh -C etc/tempest.conf

# tempest.conf
[DEFAULT]
debug = True
log_file = tempest.log
use_stderr = False
use_syslog = False

[oslo_concurrency]
lock_path = /opt/stack/data/tempest

[compute]
fixed_network_name = private
ssh_connect_method = floating
flavor_ref_alt = 84
flavor_ref = 42
image_alt_ssh_user = cirros
image_ref_alt = 8bbeeb3d-fea4-43ee-8c27-5b1015693590
image_ref = 8bbeeb3d-fea4-43ee-8c27-5b1015693590
ssh_user = cirros
build_timeout = 196

[volume]
build_timeout = 196

[identity]
auth_version = v2
uri_v3 = http://192.168.230.161:5000/v3
uri = http://192.168.230.161:5000/v2.0/

[auth]
use_dynamic_credentials = True
tempest_roles = Member
admin_domain_name = Default
admin_tenant_id = b96b0deb693842b2a09a0d91832e41ea
admin_tenant_name = admin
admin_password = imsi00
admin_username = admin

[image-feature-enabled]
deactivate_image = True

[validation]
network_for_ssh = private
image_ssh_user = cirros
ssh_timeout = 196
ip_version_for_ssh = 4
run_validation = False
connect_method = floating

[compute-feature-enabled]
allow_duplicate_networks = True
attach_encrypted_volume = True
live_migrate_paused_instances = True
preserve_ports = True
api_extensions = all
block_migration_for_live_migration = False
change_password = False
live_migration = False
resize = True
max_microversion = latest

[network]
default_network = 10.0.0.0/24
public_router_id =
public_network_id = 9353aab8-5f65-4daa-8c30-d90b588ec36d
tenant_networks_reachable = false
api_version = 2.0

[network-feature-enabled]
api_extensions = all
ipv6_subnet_attributes = True
ipv6 = True

[orchestration]
stack_owner_role = _member_
build_timeout = 900
instance_type = m1.heat


[scenario]
large_ops_number = 0
img_file = cirros-0.3.4-x86_64-disk.img
aki_img_file = cirros-0.3.4-x86_64-vmlinuz
ari_img_file = cirros-0.3.4-x86_64-initrd
ami_img_file = cirros-0.3.4-x86_64-blank.img
img_dir = /home/stack/Documents/github/devstack/files/images/cirros-0.3.4-x86_64-uec

[telemetry-feature-enabled]
events = True

[object-storage-feature-enabled]
discoverable_apis = all

[volume-feature-enabled]
api_extensions = all
volume_services = True
incremental_backup_force = True

[dashboard]
dashboard_url = http://192.168.230.161/

[cli]
cli_dir = /usr/local/bin

[service_available]
trove = True
ironic = False
sahara = False
horizon = True
ceilometer = True
heat = True
swift = True
cinder = True
neutron = True
nova = True
glance = True
key = True





[ 최신 버전으로 설치 ]
# devstack 최신소스 다운로드
$ cd Git/devstack
$ git pull --ff-only origin master

# OpenStack 최신소스 다운로드
$ vi git_update.sh

#! /bin/bash

cd /opt/stack/ceilometer/
git checkout master
git pull origin master

cd /opt/stack/cinder/
git checkout master
git pull origin master

cd /opt/stack/cliff/
git checkout master
git pull origin master

cd /opt/stack/data/
git checkout master
git pull origin master

cd /opt/stack/glance/
git checkout master
git pull origin master

cd /opt/stack/heat/
git checkout master
git pull origin master

cd /opt/stack/horizon/
git checkout master
git pull origin master

cd /opt/stack/keystone/
git checkout master
git pull origin master

cd /opt/stack/logs/
git checkout master
git pull origin master

cd /opt/stack/neutron/
git checkout master
git pull origin master

cd /opt/stack/nova/
git checkout master
git pull origin master

cd /opt/stack/noVNC/
git checkout master
git pull origin master

cd /opt/stack/oslo.config/
git checkout master
git pull origin master

cd /opt/stack/oslo.messaging/
git checkout master
git pull origin master

cd /opt/stack/oslo.rootwrap/
git checkout master
git pull origin master

cd /opt/stack/oslo.vmware/
git checkout master
git pull origin master

cd /opt/stack/pbr/
git checkout master
git pull origin master

cd /opt/stack/pycadf/
git checkout master
git pull origin master

cd /opt/stack/python-ceilometerclient/
git checkout master
git pull origin master

cd /opt/stack/python-cinderclient/
git checkout master
git pull origin master

cd /opt/stack/python-glanceclient/
git checkout master
git pull origin master

cd /opt/stack/python-heatclient/
git checkout master
git pull origin master

cd /opt/stack/python-keystoneclient/
git checkout master
git pull origin master

cd /opt/stack/python-neutronclient/
git checkout master
git pull origin master

cd /opt/stack/python-novaclient/
git checkout master
git pull origin master

cd /opt/stack/python-openstackclient/
git checkout master
git pull origin master

cd /opt/stack/python-swiftclient/
git checkout master
git pull origin master

cd /opt/stack/requirements/
git checkout master
git pull origin master

cd /opt/stack/stevedore/
git checkout master
git pull origin master

cd /opt/stack/swift/
git checkout master
git pull origin master

cd /opt/stack/taskflow/
git checkout master
git pull origin master

cd /opt/stack/tempest/
git checkout master
git pull origin master


# devstack 재설치
$ ./stack.sh


[ 이전 Package 제거 ]
$ vi clean_package.sh

#! /bin/bash

cd /usr/local/lib/python2.7/dist-packages
find -depth -maxdepth 1 -name "*nova*" | xargs sudo rm -rf
find -depth -maxdepth 1 -name "*ceilometer*" | xargs sudo rm -rf
find -depth -maxdepth 1 -name "*cinder*" | xargs sudo rm -rf
find -depth -maxdepth 1 -name "*glance*" | xargs sudo rm -rf
find -depth -maxdepth 1 -name "*keystone*" | xargs sudo rm -rf
find -depth -maxdepth 1 -name "*horizon*" | xargs sudo rm -rf
find -depth -maxdepth 1 -name "*neutron*" | xargs sudo rm -rf
find -depth -maxdepth 1 -name "*oslo*" | xargs sudo rm -rf
find -depth -maxdepth 1 -name "*heat*" | xargs sudo rm -rf
find -depth -maxdepth 1 -name "*pbr*" | xargs sudo rm -rf
find -depth -maxdepth 1 -name "*pycadf*" | xargs sudo rm -rf
find -depth -maxdepth 1 -name "*openstackclient*" | xargs sudo rm -rf
find -depth -maxdepth 1 -name "*swift*" | xargs sudo rm -rf
find -depth -maxdepth 1 -name "*stevedore*" | xargs sudo rm -rf
find -depth -maxdepth 1 -name "*taskflow*" | xargs sudo rm -rf
find -depth -maxdepth 1 -name "*tempest*" | xargs sudo rm -rf



[ Volume Attach 시에 VM 안에서 Volume 을 인식 못할 때 ]
아래 명령을 수행한 후 /dev/vdb 가 보이는지 확인
# echo 1 > /sys/bus/pci/rescan 

[ root를 EBS Boot on Volume 으로 생성하면서 Volume Attach 를 할 경우 ]
# nova boot [name] --flavor [flavorid] --block-device id=[imageid],source=image,dest=volume,size=10,bootindex=0,shutdown=remove 
--block-device id=[volumeid],source=volume,dest=volume,size=100,bootindex=1

[ pip 패키지를 캐시에 다운로드만 하려고 할 때 (설치는 하지 않음) ]
# sudo pip install python-openstackclient --download=/var/cache/pip


[ cpu, memory overcommit 설정 ]
$ vi /etc/nova/nova.conf

scheduler_default_filters = RetryFilter,AvailabilityZoneFilter,CoreFilter,RamFilter,ComputeFilter,ImagePropertiesFilter,ServerGroupAntiAffinityFilter,ServerGroupAffinityFilter
cpu_allocation_ratio = 16.0
ram_allocation_ratio = 100.0
disk_allocation_ratio = 100.0



[ vm 이 DNS를 찾는지 확인 ]
$ sudo tcpdump -i tap2404d0f1-25 -n -v udp port 53



[ vm 에 할당되는 DNS 변경 ]
$ neutron subnet-list
$ neutron subnet-update <subnet> --dns_nameservers list=true 8.8.8.8 8.8.4.4




[ Horizon 접속 시 no such table: django_session 에러가 날 때 ]
아래 명령으로 db 테이블을 생성해야 함
$ cd /opt/stack/horizon
$ python manage.py syncdb




[ Murano WordPress Package Import ]
$ export MURANO_REPO_URL=http://storage.apps.openstack.org
$ murano package-import io.murano.apps.WordPress

wordpress 접속
http://192.168.75.209/wordpress




[ OpenStack Source virtualenv pip install ]
$ mkdir -p ~/.pip
$ vi ~/.pip/pip.conf
[global]
#index-url=https://pypi.python.org/pypi/
#index-url=http://pypi.gocept.com/simple/
index-url=https://pypi.python.org/simple/

$ cd ~Documents/github/Virtualenvs
$ virtualenv mitaka
$ cd mitaka
$ . bin/activate
$ pip install -r requirements.txt --trusted-host pypi.python.org








반응형
Posted by seungkyua@gmail.com
,
반응형

[ 숯불갈비 ]

- 8월 28일 kbs2 생생정보통 달마루 (원주시 개운동 313-12, 010-3032-9353, 033-764-9900)

 

[ 간장게장 ]

- 9월 23일 kbs2 생생정보통 오가네 간장게장 (가평군 청평면 고성리 611-2, 031-585-2452)

 

[ 왕새우 양식장 ]

- 9월 23일 kbs2 생생정보통 담미수산 (전라남도 신안군 압해읍 대천리, 010-8710-8577)

 

 

 

 

1월

-

 

 

2월

-

 

 

3월

-

 

 

4월

- 4월 25일 kbs 생생 정보통

   . 섬진강 참게 요리

 

5월

-

 

6월

-

 

7월

-

 

8월

-

 

9월

-

 

10월

-

 

11월

-

 

12월

-

 

 

반응형
Posted by seungkyua@gmail.com
,
반응형

[ Mac vmware 에 설치한 Ubuntu 에 vt-x 활성화하기 위해 vmx 파일 수정]

vhv.enable = "TRUE"


[ ssh server 설치 ]

sudo apt-get install -y openssh-server


[ 구조 설명 ]

Cloud Controller

    - hostname : controller

    - eth0 : 192.168.75.131

    - eth1 : 192.168.230.131

    - 설치 모듈 : mysql, rabbitMQ, keystone, glance, nova-api,

                       cinder-api, cinder-scheduler, cinder-volume, open-iscsi, iscsitarget

                       quantum-server

Network

    - hostname : network

    - eth0 : 192.168.75.132

    - eth1 : 192.168.230.132

    - eth2 : 

    - eth3 : 192.168.75.133

    - 설치 모듈 : openvswitch-switch openvswitch-datapath-dkms

                       quantum-plugin-openvswitch-agent dnsmasq quantum-dhcp-agent quantum-l3-agent

Compute

    - hostname : compute

    - eth0 : 192.168.75.134

    - eth1 : 192.168.230.134

    - eth2 : 

    - 설치 모듈 : openvswitch-switch openvswitch-datapath-dkms 

                       quantum-plugin-openvswitch-agent, nova-compute-kvm, open-iscsi, iscsitarget


[ network 설정 ]

eth0 : public 망 (NAT)                          192.168.75.0/24

eth1 : private host 망 Custom(VMnet2)  192.168.230.0/24

eth2 : vm private 망                             10.0.0.0/24

eth3 : vm Quantum public 망(NAT)        192.168.75.0/26


[ hostname 변경 ]

vi /etc/hosts

192.168.230.131 controller

192.168.230.132 network

192.168.230.134 compute


vi /etc/hostname

   controller


hostname -F /etc/hostname

새로운 터미널로 확인


[ eth0 eth1 설정 ]

vi /etc/network/interfaces


# The loopback network interface

auto lo

iface lo inet loopback


# Host Public 망

auto eth0

iface eth0 inet static

      address 192.168.75.131

      netmask 255.255.255.0

      gateway 192.168.75.2

      dns-nameservers 8.8.8.8 8.8.4.4


# Host Private 망

auto eth1

iface eth1 inet static

      address 192.168.230.131

      netmask 255.255.255.0


service networking restart


[ vmware 에 설치한 Ubuntu 에서 가상화를 지원하는지 확인 ]

egrep '(vmx|svm)' --color=always /proc/cpuinfo


[ nova 설치 매뉴얼 ]

https://github.com/mseknibilel/OpenStack-Grizzly-Install-Guide/blob/master/OpenStack_Grizzly_Install_Guide.rst


[ nova 소스 위치 ]

nova link source = /usr/lib/python2.7/dist-packages/nova

nova original source = /usr/share/pyshared/nova


##################   모든 node 공통 설치하기   #####################


[ root 패스워드 세팅 ]

sudo su -

passwd


[ repository upgrade ]

apt-get install -y ubuntu-cloud-keyring python-software-properties software-properties-common python-keyring


echo deb http://ubuntu-cloud.archive.canonical.com/ubuntu precise-updates/grizzly main >> /etc/apt/sources.list.d/grizzly.list


apt-get update

apt-get upgrade

apt-get dist-upgrade


[ screen vim 설치 ]

sudo apt-get install -y screen vim


[ .screenrc ]

vbell off

autodetach on

startup_message off

defscrollback 1000

attrcolor b ".I"

termcap xterm 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm'

defbce "on"

#term screen-256color


## apps I want to auto-launch

#screen -t irssi irssi

#screen -t mutt mutt


## statusline, customized. (should be one-line)

hardstatus alwayslastline '%{gk}[ %{G}%H %{g}][%= %{wk}%?%-Lw%?%{=b kR}[%{W}%n%f %t%?(%u)%?%{=b kR}]%{= kw}%?%+Lw%?%?%= %{g}][%{Y}%l%{g}]%{=b C}[ %D %m/%d %C%a ]%{W}'


[ .vimrc ]

syntax on

set nocompatible

set number

set backspace=indent,eol,start

set tabstop=4

set shiftwidth=4

set autoindent

set visualbell

set laststatus=2

set statusline=%h%F%m%r%=[%l:%c(%p%%)]

set hlsearch

set background=dark

set expandtab

set tags=./tags,./TAGS,tags,TAGS,/usr/share/pyshared/nova/tags

set et

" Removes trailing spaces
function! TrimWhiteSpace()
    %s/\s\+$//e
endfunction

nnoremap <silent> <Leader>rts :call TrimWhiteSpace()<CR>
autocmd FileWritePre    * :call TrimWhiteSpace()
autocmd FileAppendPre   * :call TrimWhiteSpace()
autocmd FilterWritePre  * :call TrimWhiteSpace()
autocmd BufWritePre     * :call TrimWhiteSpace()


[ remove dmidecode ]

apt-get purge dmidecode

apt-get autoremove

kill -9 [dmidecode process]


[ root 일 때 nova 계정이 없을 경우 유저 및 권한 설정 ]

adduser nova


visudo

   nova     ALL=(ALL:ALL) NOPASSWD:ALL


[ ntp 설치 ]

apt-get install -y ntp


vi /etc/ntp.conf

#server 0.ubuntu.pool.ntp.org

#server 1.ubuntu.pool.ntp.org

#server 2.ubuntu.pool.ntp.org

#server 3.ubuntu.pool.ntp.org

server time.bora.net


service ntp restart


# 한국 시간 세팅 및 최초 시간 맞추기

ntpdate -u time.bora.net

ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime


[ mysql client 설치 ]

apt-get install -y python-mysqldb mysql-client-5.5


[ KVM 설치 및 확인 ]

apt-get install -y cpu-checker

apt-get install -y kvm libvirt-bin pm-utils

kvm-ok


# kvm 이 load 되어 있는지 확인하기

lsmod | grep kvm


# 서버 reboot 시에 kvm 자동 load 추가

vi /etc/modules

   kvm

   kvm_intel


vi /etc/libvirt/qemu.conf

   cgroup_device_acl = [

   "/dev/null", "/dev/full", "/dev/zero",

   "/dev/random", "/dev/urandom",

   "/dev/ptmx", "/dev/kvm", "/dev/kqemu",

   "/dev/rtc", "/dev/hpet","/dev/net/tun"

   ]


# delete default virtual bridge

virsh net-destroy default

virsh net-undefine default


# enable live migration

vi /etc/libvirt/libvirtd.conf

   listen_tls = 0

   listen_tcp = 1

   auth_tcp = "none"


vi /etc/init/libvirt-bin.conf

   env libvirtd_opts="-d -l"


vi /etc/default/libvirt-bin

   libvirtd_opts="-d -l"


service dbus restart

service libvirt-bin restart


[ bridge 설치 ]

apt-get install -y vlan bridge-utils


[ IP_Forwarding 설정 ]

sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/' /etc/sysctl.conf

sysctl net.ipv4.ip_forward=1


##################   Cloud Controller 설치하기   #####################


[ ntp 세팅 ]

vi /etc/ntp.conf

   server time.bora.net

service ntp restart


[ network 세팅 ]

vi /etc/network/interfaces


# The loopback network interface

auto lo

iface lo inet loopback


# Host Public 망

auto eth0

iface eth0 inet static

      address 192.168.75.131

      netmask 255.255.255.0

      gateway 192.168.75.2

      dns-nameservers 8.8.8.8 8.8.4.4


# Host Private 망

auto eth1

iface eth1 inet static

      address 192.168.230.131

      netmask 255.255.255.0


service networking restart


[ hostname 변경 ]

vi /etc/hosts

192.168.230.131 controller

192.168.230.132 network

192.168.230.134 compute


vi /etc/hostname

   controller


hostname -F /etc/hostname


[ mysql db 설치 ]

apt-get install -y python-mysqldb mysql-server                 password : 임시 패스워드

sed -i 's/127.0.0.1/0.0.0.0/g' /etc/mysql/my.cnf

service mysql restart


[ rabbitmq server install ]

apt-get install -y rabbitmq-server


# user 변환

sudo su - nova


[ Database 세팅 ]

mysql -u root -p

CREATE DATABASE keystone;

GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY '임시 패스워드';

GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY '임시 패스워드';

GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'controller' IDENTIFIED BY '임시 패스워드';


CREATE DATABASE glance;

GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY '임시 패스워드';

GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY '임시 패스워드';

GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'controller' IDENTIFIED BY '임시 패스워드';


CREATE DATABASE nova;

GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY '임시 패스워드';

GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY '임시 패스워드';

GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'controller' IDENTIFIED BY '임시 패스워드';


CREATE DATABASE quantum;

GRANT ALL PRIVILEGES ON quantum.* TO 'quantum'@'%' IDENTIFIED BY '임시 패스워드';

GRANT ALL PRIVILEGES ON quantum.* TO 'quantum'@'localhost' IDENTIFIED BY '임시 패스워드';

GRANT ALL PRIVILEGES ON quantum.* TO 'quantum'@'controller' IDENTIFIED BY '임시 패스워드';


CREATE DATABASE cinder;

GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' IDENTIFIED BY '임시 패스워드';

GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' IDENTIFIED BY '임시 패스워드';

GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'controller' IDENTIFIED BY '임시 패스워드';


# grant 가 안될 때

use mysql;


UPDATE user SET

Select_priv = 'Y',

Insert_priv = 'Y',

Update_priv = 'Y',

Delete_priv = 'Y',

Create_priv = 'Y',

Drop_priv = 'Y',

Reload_priv = 'Y',

Shutdown_priv = 'Y',

Process_priv = 'Y',

File_priv = 'Y',

Grant_priv = 'Y',

References_priv = 'Y',

Index_priv = 'Y',

Alter_priv = 'Y',

Show_db_priv = 'Y',

Super_priv = 'Y',

Create_tmp_table_priv = 'Y',

Lock_tables_priv = 'Y',

Execute_priv = 'Y',

Repl_slave_priv = 'Y',

Repl_client_priv = 'Y',

Create_view_priv = 'Y',

Show_view_priv = 'Y',

Create_routine_priv = 'Y',

Alter_routine_priv = 'Y',

Create_user_priv = 'Y',

Event_priv = 'Y',

Trigger_priv = 'Y',

Create_tablespace_priv = 'Y'

WHERE user IN ('keystone', 'glance', 'nova', 'quantum', 'cinder');


[ keystone 설치 ]

sudo apt-get install -y keystone

sudo service keystone status

sudo rm /var/lib/keystone/keystone.db


sudo vi /etc/keystone/keystone.conf

connection = mysql://keystone:임시 패스워드@controller/keystone

token_format = UUID


sudo service keystone restart

sudo keystone-manage db_sync


[ keystone 세팅 ]

vi keystone_basic.sh

#!/bin/sh

#

# Keystone basic configuration 


# Mainly inspired by https://github.com/openstack/keystone/blob/master/tools/sample_data.sh


# Modified by Bilel Msekni / Institut Telecom

#

# Support: openstack@lists.launchpad.net

# License: Apache Software License (ASL) 2.0

#

HOST_IP=192.168.230.131

ADMIN_PASSWORD=${ADMIN_PASSWORD:-admin_pass}

SERVICE_PASSWORD=${SERVICE_PASSWORD:-service_pass}

export SERVICE_TOKEN="ADMIN"

export SERVICE_ENDPOINT="http://${HOST_IP}:35357/v2.0"

SERVICE_TENANT_NAME=${SERVICE_TENANT_NAME:-service}


get_id () {

    echo `$@ | awk '/ id / { print $4 }'`

}


# Tenants

ADMIN_TENANT=$(get_id keystone tenant-create --name=admin)

SERVICE_TENANT=$(get_id keystone tenant-create --name=$SERVICE_TENANT_NAME)



# Users

ADMIN_USER=$(get_id keystone user-create --name=admin --pass="$ADMIN_PASSWORD" --email=admin@domain.com)



# Roles

ADMIN_ROLE=$(get_id keystone role-create --name=admin)

KEYSTONEADMIN_ROLE=$(get_id keystone role-create --name=KeystoneAdmin)

KEYSTONESERVICE_ROLE=$(get_id keystone role-create --name=KeystoneServiceAdmin)


# Add Roles to Users in Tenants

keystone user-role-add --user-id $ADMIN_USER --role-id $ADMIN_ROLE --tenant-id $ADMIN_TENANT

keystone user-role-add --user-id $ADMIN_USER --role-id $KEYSTONEADMIN_ROLE --tenant-id $ADMIN_TENANT

keystone user-role-add --user-id $ADMIN_USER --role-id $KEYSTONESERVICE_ROLE --tenant-id $ADMIN_TENANT


# The Member role is used by Horizon and Swift

MEMBER_ROLE=$(get_id keystone role-create --name=Member)


# Configure service users/roles

NOVA_USER=$(get_id keystone user-create --name=nova --pass="$SERVICE_PASSWORD" --tenant-id $SERVICE_TENANT --email=nova@domain.com)

keystone user-role-add --tenant-id $SERVICE_TENANT --user-id $NOVA_USER --role-id $ADMIN_ROLE


GLANCE_USER=$(get_id keystone user-create --name=glance --pass="$SERVICE_PASSWORD" --tenant-id $SERVICE_TENANT --email=glance@domain.com)

keystone user-role-add --tenant-id $SERVICE_TENANT --user-id $GLANCE_USER --role-id $ADMIN_ROLE


QUANTUM_USER=$(get_id keystone user-create --name=quantum --pass="$SERVICE_PASSWORD" --tenant-id $SERVICE_TENANT --email=quantum@domain.com)

keystone user-role-add --tenant-id $SERVICE_TENANT --user-id $QUANTUM_USER --role-id $ADMIN_ROLE


CINDER_USER=$(get_id keystone user-create --name=cinder --pass="$SERVICE_PASSWORD" --tenant-id $SERVICE_TENANT --email=cinder@domain.com)

keystone user-role-add --tenant-id $SERVICE_TENANT --user-id $CINDER_USER --role-id $ADMIN_ROLE


vi keystone_endpoints_basic.sh

#!/bin/sh

#

# Keystone basic Endpoints


# Mainly inspired by https://github.com/openstack/keystone/blob/master/tools/sample_data.sh


# Modified by Bilel Msekni / Institut Telecom

#

# Support: openstack@lists.launchpad.net

# License: Apache Software License (ASL) 2.0

#


# Host address

HOST_IP=192.168.230.131

EXT_HOST_IP=192.168.75.131

VOLUME_HOST_IP=192.168.230.131

VOLUME_EXT_HOST_IP=192.168.75.131

NETWORK_HOST_IP=192.168.230.132

NETWORK_EXT_HOST_IP=192.168.75.133


# MySQL definitions

MYSQL_USER=keystone

MYSQL_DATABASE=keystone

MYSQL_HOST=$HOST_IP

MYSQL_PASSWORD=임시 패스워드


# Keystone definitions

KEYSTONE_REGION=RegionOne

export SERVICE_TOKEN=ADMIN

export SERVICE_ENDPOINT="http://${HOST_IP}:35357/v2.0"


while getopts "u:D:p:m:K:R:E:T:vh" opt; do

  case $opt in

    u)

      MYSQL_USER=$OPTARG

      ;;

    D)

      MYSQL_DATABASE=$OPTARG

      ;;

    p)

      MYSQL_PASSWORD=$OPTARG

      ;;

    m)

      MYSQL_HOST=$OPTARG

      ;;

    K)

      MASTER=$OPTARG

      ;;

    R)

      KEYSTONE_REGION=$OPTARG

      ;;

    E)

      export SERVICE_ENDPOINT=$OPTARG

      ;;

    T)

      export SERVICE_TOKEN=$OPTARG

      ;;

    v)

      set -x

      ;;

    h)

      cat <<EOF

Usage: $0 [-m mysql_hostname] [-u mysql_username] [-D mysql_database] [-p mysql_password]

       [-K keystone_master ] [ -R keystone_region ] [ -E keystone_endpoint_url ] 

       [ -T keystone_token ]

          

Add -v for verbose mode, -h to display this message.

EOF

      exit 0

      ;;

    \?)

      echo "Unknown option -$OPTARG" >&2

      exit 1

      ;;

    :)

      echo "Option -$OPTARG requires an argument" >&2

      exit 1

      ;;

  esac

done  


if [ -z "$KEYSTONE_REGION" ]; then

  echo "Keystone region not set. Please set with -R option or set KEYSTONE_REGION variable." >&2

  missing_args="true"

fi


if [ -z "$SERVICE_TOKEN" ]; then

  echo "Keystone service token not set. Please set with -T option or set SERVICE_TOKEN variable." >&2

  missing_args="true"

fi


if [ -z "$SERVICE_ENDPOINT" ]; then

  echo "Keystone service endpoint not set. Please set with -E option or set SERVICE_ENDPOINT variable." >&2

  missing_args="true"

fi


if [ -z "$MYSQL_PASSWORD" ]; then

  echo "MySQL password not set. Please set with -p option or set MYSQL_PASSWORD variable." >&2

  missing_args="true"

fi


if [ -n "$missing_args" ]; then

  exit 1

fi

 

keystone service-create --name nova --type compute --description 'OpenStack Compute Service'

keystone service-create --name cinder --type volume --description 'OpenStack Volume Service'

keystone service-create --name glance --type image --description 'OpenStack Image Service'

keystone service-create --name keystone --type identity --description 'OpenStack Identity'

keystone service-create --name ec2 --type ec2 --description 'OpenStack EC2 service'

keystone service-create --name quantum --type network --description 'OpenStack Networking service'


create_endpoint () {

  case $1 in

    compute)

    keystone endpoint-create --region $KEYSTONE_REGION --service-id $2 --publicurl 'http://'"$EXT_HOST_IP"':8774/v2/$(tenant_id)s' --adminurl 'http://'"$HOST_IP"':8774/v2/$(tenant_id)s' --internalurl 'http://'"$HOST_IP"':8774/v2/$(tenant_id)s'

    ;;

    volume)

    keystone endpoint-create --region $KEYSTONE_REGION --service-id $2 --publicurl 'http://'"$VOLUME_EXT_HOST_IP"':8776/v1/$(tenant_id)s' --adminurl 'http://'"$VOLUME_HOST_IP"':8776/v1/$(tenant_id)s' --internalurl 'http://'"$VOLUME_HOST_IP"':8776/v1/$(tenant_id)s'

    ;;

    image)

    keystone endpoint-create --region $KEYSTONE_REGION --service-id $2 --publicurl 'http://'"$EXT_HOST_IP"':9292/v2' --adminurl 'http://'"$HOST_IP"':9292/v2' --internalurl 'http://'"$HOST_IP"':9292/v2'

    ;;

    identity)

    keystone endpoint-create --region $KEYSTONE_REGION --service-id $2 --publicurl 'http://'"$EXT_HOST_IP"':5000/v2.0' --adminurl 'http://'"$HOST_IP"':35357/v2.0' --internalurl 'http://'"$HOST_IP"':5000/v2.0'

    ;;

    ec2)

    keystone endpoint-create --region $KEYSTONE_REGION --service-id $2 --publicurl 'http://'"$EXT_HOST_IP"':8773/services/Cloud' --adminurl 'http://'"$HOST_IP"':8773/services/Admin' --internalurl 'http://'"$HOST_IP"':8773/services/Cloud'

    ;;

    network)

    keystone endpoint-create --region $KEYSTONE_REGION --service-id $2 --publicurl 'http://'"$NETWORK_EXT_HOST_IP"':9696/' --adminurl 'http://'"$NETWORK_HOST_IP"':9696/' --internalurl 'http://'"$NETWORK_HOST_IP"':9696/'

    ;;

  esac

}


for i in compute volume image object-store identity ec2 network; do

  id=`mysql -h "$MYSQL_HOST" -u "$MYSQL_USER" -p"$MYSQL_PASSWORD" "$MYSQL_DATABASE" -ss -e "SELECT id FROM service WHERE type='"$i"';"` || exit 1

  create_endpoint $i $id

done


# keystone 접근 어드민 

vi creds

unset http_proxy

unset https_proxy

export OS_TENANT_NAME=admin

export OS_USERNAME=admin

export OS_PASSWORD=admin_pass

export OS_AUTH_URL="http://controller:5000/v2.0/"


source creds

keystone user-list


[ Glance 설치 ]

sudo apt-get install -y glance

sudo rm /var/lib/glance/glance.sqlite

sudo service glance-api status

sudo service glance-registry status


sudo vi /etc/glance/glance-api-paste.ini

[filter:authtoken]

paste.filter_factory = keystone.middleware.auth_token:filter_factory

delay_auth_decision = true

auth_host = 192.168.230.141

auth_port = 35357

auth_protocol = http

admin_tenant_name = service

admin_user = glance

admin_password = service_pass


sudo vi /etc/glance/glance-registry-paste.ini

[filter:authtoken]

paste.filter_factory = keystone.middleware.auth_token:filter_factory

auth_host = 192.168.230.141

auth_port = 35357

auth_protocol = http

admin_tenant_name = service

admin_user = glance

admin_password = service_pass


sudo vi /etc/glance/glance-api.conf

sql_connection = mysql://glance:임시 패스워드@192.168.230.141/glance

enable_v1_api = True

enable_v2_api = True


[paste_deploy]

flavor=keystone


sudo vi /etc/glance/glance-registry.conf

sql_connection = mysql://glance:임시 패스워드@192.168.230.141/glance


[paste_deploy]

flavor=keystone


sudo glance-manage db_sync

sudo service glance-registry restart

sudo service glance-api restart


[ Image 등록 ]

mkdir images

cd images

wget --no-check-certificate https://launchpad.net/cirros/trunk/0.3.0/+download/cirros-0.3.0-x86_64-disk.img

glance image-create --name cirros --is-public true --container-format bare --disk-format qcow2 < cirros-0.3.0-x86_64-disk.img

glance image-list


[ Nova-api, scheduler 설치 ]

sudo apt-get install -y nova-api nova-scheduler nova-cert novnc nova-consoleauth nova-novncproxy nova-doc nova-conductor


mysql -uroot -p임시 패스워드 -e 'CREATE DATABASE nova;'

mysql -uroot -p임시 패스워드 -e "GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY '임시 패스워드';"

mysql -uroot -p임시 패스워드 -e "GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY '임시 패스워드';"


sudo vi /etc/nova/api-paste.ini

   [filter:authtoken]

   paste.filter_factory = keystoneclient.middleware.auth_token:filter_factory

   auth_host = 192.168.230.141

   auth_port = 35357

   auth_protocol = http

   admin_tenant_name = service

   admin_user = nova

   admin_password = service_pass

   signing_dir = /tmp/keystone-signing-nova

   # Workaround for https://bugs.launchpad.net/nova/+bug/1154809

   auth_version = v2.0



sudo vi /etc/nova/nova.conf


[DEFAULT]

logdir=/var/log/nova

state_path=/var/lib/nova

lock_path=/run/lock/nova

verbose=True

api_paste_config=/etc/nova/api-paste.ini

compute_scheduler_driver=nova.scheduler.simple.SimpleScheduler

rabbit_host=192.168.230.141

nova_url=http://192.168.230.141:8774/v1.1/

sql_connection=mysql://nova:imsi00@192.168.230.141/nova

root_helper=sudo nova-rootwrap /etc/nova/rootwrap.conf


# Auth

use_deprecated_auth=false

auth_strategy=keystone


# Imaging service

glance_api_servers=192.168.230.141:9292

image_service=nova.image.glance.GlanceImageService


# Vnc configuration

novnc_enabled=true

novncproxy_base_url=http://192.168.75.141:6080/vnc_auto.html

novncproxy_port=6080

vncserver_proxyclient_address=192.168.230.141

vncserver_listen=0.0.0.0


# Network settings

network_api_class=nova.network.quantumv2.api.API

quantum_url=http://192.168.230.143:9696

quantum_auth_strategy=keystone

quantum_admin_tenant_name=service

quantum_admin_username=quantum

quantum_admin_password=service_pass

quantum_admin_auth_url=http://192.168.230.141:35357/v2.0

libvirt_vif_driver=nova.virt.libvirt.vif.LibvirtHybridOVSBridgeDriver

linuxnet_interface_driver=nova.network.linux_net.LinuxOVSInterfaceDriver

firewall_driver=nova.virt.libvirt.firewall.IptablesFirewallDriver


#Metadata

service_quantum_metadata_proxy = True

quantum_metadata_proxy_shared_secret = helloOpenStack

metadata_host = 192.168.230.141

metadata_listen = 127.0.0.1

metadata_listen_port = 8775


# Compute #

compute_driver=libvirt.LibvirtDriver


# Cinder #

volume_api_class=nova.volume.cinder.API

osapi_volume_listen_port=5900


sudo nova-manage db sync


# restart nova services

cd /etc/init.d/; for i in $( ls nova-* ); do sudo service $i restart; done


# check nova services

nova-manage service list


[ Horizon 설치 ]

sudo apt-get install -y openstack-dashboard memcached


# ubuntu 테마 삭제

sudo apt-get purge openstack-dashboard-ubuntu-them


# apache and mecached reload

sudo service apache2 restart

sudo service memcached restart


# browser 접속 url

http://192.168.75.141/horizon/


##################   Cinder 설치하기   #####################


[ ntp 세팅 ]

sudo vi /etc/ntp.conf

   server 192.168.230.141

sudo service ntp restart


[ network 세팅 ]


[ hostname 변경 ]


[ Cinder  설치 ]

sudo apt-get install -y cinder-api cinder-scheduler cinder-volume iscsitarget open-iscsi iscsitarget-dkms

sudo sed -i 's/false/true/g' /etc/default/iscsitarget

sudo vi /etc/iscsi/iscsid.conf

   node.startup = automatic

sudo service iscsitarget start

sudo service open-iscsi start


mysql -uroot -p임시 패스워드 -e 'CREATE DATABASE cinder;'

mysql -uroot -p임시 패스워드 -e "GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' IDENTIFIED BY '임시 패스워드';"

mysql -uroot -p임시 패스워드 -e "GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' IDENTIFIED BY '임시 패스워드';"


sudo vi /etc/cinder/api-paste.ini

   [filter:authtoken]

   paste.filter_factory = keystone.middleware.auth_token:filter_factory

   service_protocol = http

   service_host = 192.168.75.141

   service_port = 5000

   auth_host = 192.168.230.141

   auth_port = 35357

   auth_protocol = http

   admin_tenant_name = service

   admin_user = cinder

   admin_password = service_pass


sudo vi /etc/cinder/cinder.conf

   [DEFAULT]

   rootwrap_config=/etc/cinder/rootwrap.conf

   sql_connection = mysql://cinder:임시 패스워드@192.168.230.141/cinder

   api_paste_config = /etc/cinder/api-paste.ini

   iscsi_helper=ietadm

   volume_name_template = volume-%s

   volume_group = cinder-volumes

   verbose = True

   auth_strategy = keystone

   rabbit_host = 192.168.230.141


sudo cinder-manage db sync


[ cinder volume 생성 ]

dd if=/dev/zero of=cinder-volumes bs=1 count=0 seek=10G

sudo losetup /dev/loop2 cinder-volumes

sudo fdisk /dev/loop2


1. sudo fdisk -l

2. sudo fdisk /dev/sdb

3. Press ‘n' to create a new disk partition,

4. Press 'p' to create a primary disk partition,

5. Press '1' to denote it as 1st disk partition,

6. Either press ENTER twice to accept the default of 1st and last cylinder – to convert the remainder of hard disk to a single disk partition

   -OR- press ENTER once to accept the default of the 1st, and then choose how big you want the partition to be by specifying +size{K,M,G} 

   e.g. +5G or +6700M.

7. Press 't', then select the new partition you made.

8. Press '8e' change your new partition to 8e, i.e. Linux LVM partition type.

9. Press ‘p' to display the hard disk partition setup. Please take note that the first partition is denoted as /dev/sda1 in Linux.

10. Press 'w' to write the partition table and exit fdisk upon completion.


sudo pvcreate /dev/loop2

sudo vgcreate cinder-volumes /dev/loop2


# 서버 reboot 시에도 자동으로 설정

sudo vi /etc/init.d/cinder-setup-backing-file

losetup /dev/loop2 /home/nova/cinder-volumes

exit 0


sudo chmod 755 /etc/init.d/cinder-setup-backing-file

sudo ln -s /etc/init.d/cinder-setup-backing-file /etc/rc2.d/S10cinder-setup-backing-file


# restart cinder services

cd /etc/init.d/; for i in $( ls cinder-* ); do sudo service $i restart; done


# verify cinder services

cd /etc/init.d/; for i in $( ls cinder-* ); do sudo service $i status; done



##################   Quantum Server 설치하기   #####################


[ ntp 세팅 ]

sudo vi /etc/ntp.conf

   server 192.168.230.141

sudo service ntp restart


[ network 세팅 ]


[ hostname 변경 ]


[ quantum server 설치 ]

sudo apt-get install -y quantum-server

sudo rm -rf /var/lib/quantum/ovs.sqlite


mysql -uroot -p임시 패스워드 -e 'CREATE DATABASE quantum;'

mysql -uroot -p임시 패스워드 -e "GRANT ALL PRIVILEGES ON quantum.* TO 'quantum'@'%' IDENTIFIED BY '임시 패스워드';"

mysql -uroot -p임시 패스워드 -e "GRANT ALL PRIVILEGES ON quantum.* TO 'quantum'@'localhost' IDENTIFIED BY '임시 패스워드';"


sudo vi /etc/quantum/api-paste.ini

   [filter:authtoken]

   paste.filter_factory = keystone.middleware.auth_token:filter_factory

   auth_host = 192.168.230.141

   auth_port = 35357

   auth_protocol = http

   admin_tenant_name = service

   admin_user = quantum

   admin_password = service_pass


sudo vi /etc/quantum/quantum.conf

   rabbit_host = 192.168.230.141


sudo service quantum-server restart

sudo service quantum-server status


##################   Quantum Network 설치하기   #####################


[ ntp 세팅 ]

sudo vi /etc/ntp.conf

   server 192.168.230.141

sudo service ntp restart


[ eth2 vm 용 public 망 추가 - Quantum public network 로 사용 ]

sudo vi /etc/network/interfaces


auto lo

iface lo inet loopback


# host public 망

auto eth0

iface eth0 inet static

      address 192.168.75.144

      netmask 255.255.255.0

      gateway 192.168.75.2

      dns-nameservers 8.8.8.8, 8.8.4.4


# vm private 망, host private 망

auto eth1

iface eth1 inet static

      address 192.168.230.144

      netmask 255.255.255.0


# vm public 망

auto eth2

iface eth2 inet manual

      up ifconfig $IFACE 0.0.0.0 up

      up ip link set $IFACE promisc on

      down ip link set $IFACE promisc off

      down ifconfig $IFACE down


sudo service networking restart


[ hostname 변경 ]


[ openVSwitch 설치 ]

sudo apt-get install -y openvswitch-switch openvswitch-datapath-dkms


# bridge 생성

sudo ovs-vsctl add-br br-int

sudo ovs-vsctl add-br br-ex


[ Quantum openVSwitch agent, dnsmasq, dhcp agent, L3 agent, metadata agent 설치 ]

sudo apt-get install -y quantum-plugin-openvswitch-agent dnsmasq quantum-dhcp-agent quantum-l3-agent quantum-metadata-agent


sudo vi /etc/quantum/api-paste.ini

   [filter:authtoken]

   paste.filter_factory = keystoneclient.middleware.auth_token:filter_factory

   auth_host = 192.168.230.141

   auth_port = 35357

   auth_protocol = http

   admin_tenant_name = service

   admin_user = quantum

   admin_password = service_pass


sudo vi /etc/quantum/plugins/openvswitch/ovs_quantum_plugin.ini

   [DATABASE]

   sql_connection = mysql://quantum:임시 패스워드@192.168.230.141/quantum


   [OVS]

   tenant_network_type = gre

   enable_tunneling = True

   tunnel_id_ranges = 1:1000

   integration_bridge = br-int

   tunnel_bridge = br-tun

   local_ip = 192.168.230.144


sudo vi /etc/quantum/l3_agent.ini

   # 맨 아랫줄에 추가

   auth_url = http://192.168.230.141:35357/v2.0

   auth_region = RegionOne

   admin_tenant_name = service

   admin_user = quantum

   admin_password = service_pass


sudo vi /etc/quantum/metadata_agent.ini

   auth_url = http://192.168.230.141:35357/v2.0

   auth_region = RegionOne

   admin_tenant_name = service

   admin_user = quantum

   admin_password = service_pass


   nova_metadata_ip = 192.168.230.141

   nova_metadata_port = 8775

   metadata_proxy_shared_secret = helloOpenStack


sudo vi /etc/quantum/quantum.conf

   rabbit_host = 192.168.230.141


# restart Quantum services

cd /etc/init.d/; for i in $( ls quantum-* ); do sudo service $i restart; done


# br-ex 와 public 망과 연결

sudo ovs-vsctl add-port br-ex eth2



##################   Compute 설치하기   #####################


[ ntp 세팅 ]

sudo vi /etc/ntp.conf

   server 192.168.230.141

sudo service ntp restart


[ network 세팅 ]


[ hostname 변경 ]


[ openVSwitch 설치 ]

sudo apt-get install -y openvswitch-switch openvswitch-datapath-dkms


# bridge 생성

sudo ovs-vsctl add-br br-int


[ Quantum openVSwitch agent 설치 ]

sudo apt-get install -y quantum-plugin-openvswitch-agent


sudo vi /etc/quantum/plugins/openvswitch/ovs_quantum_plugin.ini

   [DATABASE]

   sql_connection = mysql://quantum:imsi00@192.168.230.141/quantum


   [OVS]

   tenant_network_type = gre

   enable_tunneling = True

   tunnel_id_ranges = 1:1000

   integration_bridge = br-int

   tunnel_bridge = br-tun

   local_ip = 192.168.230.145


sudo vi /etc/quantum/quantum.conf

   rabbit_host = 192.168.230.141


   [keystone_authtoken]  ----> ? 필요한 세팅인가?

   auth_host = 192.168.230.141

   auth_port = 35357

   auth_protocol = http

   admin_tenant_name = service

   admin_user = quantum

   admin_password = service_pass

   signing_dir = /var/lib/quantum/keystone-signing


# quantum openVSwitch agent restart

sudo service quantum-plugin-openvswitch-agent restart


[ Nova  설치 ]

sudo apt-get install -y nova-compute-kvm open-iscsi


sudo vi /etc/nova/api-paste.ini

   [filter:authtoken]

   paste.filter_factory = keystone.middleware.auth_token:filter_factory

   auth_host = 192.168.230.141

   auth_port = 35357

   auth_protocol = http

   admin_tenant_name = service

   admin_user = nova

   admin_password = service_pass

   signing_dir = /tmp/keystone-signing-nova

   # Workaround for https://bugs.launchpad.net/nova/+bug/1154809

   auth_version = v2.0


sudo vi /etc/nova/nova-compute.conf

   [DEFAULT]

   libvirt_type=kvm

   libvirt_ovs_bridge=br-int

   libvirt_vif_type=ethernet

   libvirt_vif_driver=nova.virt.libvirt.vif.LibvirtHybridOVSBridgeDriver

   libvirt_use_virtio_for_bridges=True


sudo vi /etc/nova/nova.conf

   [DEFAULT]

   logdir=/var/log/nova

   state_path=/var/lib/nova

   lock_path=/run/lock/nova

   verbose=True

   api_paste_config=/etc/nova/api-paste.ini

   compute_scheduler_driver=nova.scheduler.simple.SimpleScheduler

   rabbit_host=192.168.230.141

   nova_url=http://192.168.230.141:8774/v1.1/

   sql_connection=mysql://nova:imsi00@192.168.230.141/nova

   root_helper=sudo nova-rootwrap /etc/nova/rootwrap.conf


   # Auth

   use_deprecated_auth=false

   auth_strategy=keystone


   # Imaging service

   glance_api_servers=192.168.230.141:9292

   image_service=nova.image.glance.GlanceImageService


   # Vnc configuration

   novnc_enabled=true

   novncproxy_base_url=http://192.168.75.141:6080/vnc_auto.html

   novncproxy_port=6080

   vncserver_proxyclient_address=192.168.230.141

   vncserver_listen=0.0.0.0


   # Network settings

   network_api_class=nova.network.quantumv2.api.API

   quantum_url=http://192.168.230.141:9696

   quantum_auth_strategy=keystone

   quantum_admin_tenant_name=service

   quantum_admin_username=quantum

   quantum_admin_password=service_pass

   quantum_admin_auth_url=http://192.168.230.141:35357/v2.0

   libvirt_vif_driver=nova.virt.libvirt.vif.LibvirtHybridOVSBridgeDriver

   linuxnet_interface_driver=nova.network.linux_net.LinuxOVSInterfaceDriver

   firewall_driver=nova.virt.libvirt.firewall.IptablesFirewallDriver


   #Metadata

   service_quantum_metadata_proxy = True

   quantum_metadata_proxy_shared_secret = helloOpenStack

   metadata_host = 192.168.230.141

   metadata_listen = 127.0.0.1

   metadata_listen_port = 8775


   # Compute #

   compute_driver=libvirt.LibvirtDriver


   # Cinder #

   volume_api_class=nova.volume.cinder.API

   osapi_volume_listen_port=5900


# restart nova service

cd /etc/init.d/; for i in $( ls nova-* ); do sudo service $i restart; done


# nova service status

nova-manage service list



[ Nova 명령어 실행 ]

# admin 권한으로 실행

source creds


# tenant, user 생성

keystone tenant-create --name myproject

keystone role-list

keystone user-create --name=myuser --pass=임시 패스워드 --tenant-id d8eca2f95bbf4ddc8bda878fe9669661 --email=myuser@domain.com

keystone user-role-add --tenant-id d8eca2f95bbf4ddc8bda878fe9669661 --user-id 29736a14d7d4471fa50ca04da38d89b1 --role-id 022cd675521b45ffb94693e7cab07db7


# Network 생성

quantum net-create --tenant-id d8eca2f95bbf4ddc8bda878fe9669661 net_myproject

quantum net-list


# Network 에 internal private subnet 생성

quantum subnet-create --tenant-id d8eca2f95bbf4ddc8bda878fe9669661 --name net_myproject_internal net_myproject 10.0.0.0/24


# Router 생성

quantum router-create --tenant-id d8eca2f95bbf4ddc8bda878fe9669661 net_myproject_router


# L3 agent 를 Router 와 연결

quantum l3-agent-router-add 829f424b-0879-4fee-a373-84c0f0bcbb9b net_myproject_router


# Router 를 Subnet 에 연결

quantum router-interface-add f3e2c02e-2146-4388-b415-c95d45f4f3a3 99189c7b-50cd-4353-9358-2dd74efbb762


# restart quantum services

cd /etc/init.d/; for i in $( ls quantum-* ); do sudo service $i restart; done


# 환경설정파일 생성

vi myproject

export OS_TENANT_NAME=myproject

export OS_USERNAME=myuser

export OS_PASSWORD=임시 패스워드

export OS_AUTH_URL="http://192.168.230.141:5000/v2.0/"


# project 권한으로 진행

source myproject








nova image-list

nova secgroup-list

nova secgroup-add-rule default tcp 22 22 0.0.0.0/0

nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0

ssh-keygen

nova keypair-add --pub_key ~/.ssh/id_rsa.pub mykey

nova keypair-list

nova flavor-list

nova boot test01 --flavor 1 --image 5c4c2339-55bd-4e9b-86cb-23694e3b9b17 --key_name mykey --security_group default


nova floating-ip-list

nova floating-ip-create

nova add-floating-ip 80eb7545-258e-4f26-a842-c1993cb03ae5 192.168.75.225

nova remove-floating-ip 80eb7545-258e-4f26-a842-c1993cb03ae5 192.168.75.225

nova floating-ip-delete 192.168.75.225


nova volume-list

nova volume-create --display_name ebs01 1

nova volume-attach 80eb7545-258e-4f26-a842-c1993cb03ae5 c209e2f1-5ff7-496c-8928-d57487d86c6f /dev/vdb

nova volume-detach 80eb7545-258e-4f26-a842-c1993cb03ae5 a078f20a-62c6-432c-8fa2-7cfd9950a64f

nova volume-delete a078f20a-62c6-432c-8fa2-7cfd9950a64f


# 접속 후 ext4 로 format 및 mount

mke2fs -t ext4 /dev/vdb

mount /dev/vdb /test



[ vnc console 접속 ]

nova get-vnc-console 80eb7545-258e-4f26-a842-c1993cb03ae5 novnc





반응형
Posted by seungkyua@gmail.com
,
반응형

1. EBS Backup

    - EBS를 Snapshot 방식이 아닌 File 방식을 사용하여 Incremental 하게 Backup 하는 서비스


2. Live Migration Boot From Volume

    - iSCSI 기반의 Root 로 Boot 된 VM 을 Live Migration 하는 방식


3. ENI (Elastic Network Interface)

    -  License 가 Mac Address 기반으로 적용되는 경우 Virtual Interface Pool을 만들고, 

        추후 인스턴스 생성 시 지정하여 사용하는 방식


4. Flavor Type 별 Network QoS

    - Instance의 Network Bandwidth를 Flavor Type별로 지정할 수 있는 서비스



반응형
Posted by seungkyua@gmail.com
,