본문 바로가기

Language/Python

heat YAML파일로 인스턴스 자동 생성

아래는 JSP로 구축한 웹사이트의 특정 이벤트를 발생 시켰을때 .py파일 실행 시키는 부분

//content_s_user_id는 jsp에서 로그인한 계정ID의 세션 변수
Process p1 = Runtime.getRuntime().exec("python3 /절대경로/initial.py 1 "+content_s_user_id);

 

인스턴스들 자동 생성 코드

import sys, subprocess, os

run = sys.argv[1]		//'0'은 실행되는 명령어 출력(실행X)	'1'은 실제로 실행
name = sys.argv[2]		//생성할 인스턴스들에 들어갈 공통 이름

def envset(project_id, project_name) :		//'admin'계정은 공통이고 'project'만 바꿀거라 바뀔 프로젝트 ID,NAME값 받음
    os.environ['OS_AUTH_URL'] = "http://192.168.0.3:5000/v3"
    os.environ['OS_PROJECT_ID'] = project_id
    os.environ['OS_PROJECT_NAME'] = project_name
    os.environ['OS_USER_DOMAIN_NAME'] = "default"
    os.environ['OS_PROJECT_DOMAIN_ID'] = "default"
    os.environ['OS_USERNAME'] = "admin"
    os.environ['OS_PASSWORD'] = 패스워드 입력	
    os.environ['OS_REGION_NAME'] = "RegionOne"
    os.environ['OS_INTERFACE'] = "public"
    os.environ['OS_IDENTITY_API_VERSION'] = "3"

if run == '0' :	//실행될 명령어만 출력

    print(f"subprocess.run(['mkdir','/절대경로/{name}'])")	//사용자 별로 heat YAML파일을 관리를 위해 디렉터리 생성
   
   for i in ["첫번째 프로젝트 이름","첫번째 프로젝트 ID"], ["두번째 프로젝트 이름","두번째 프로젝트 ID"], ["세번째 프로젝트 이름","세번째 프로젝트 ID"] :
        print(f"envset({i[1]},{i[0]})")			//openrc 파일 환경변수 등록
        cmd=f"sed 's/$name/{name}/g' /절대경로/{i[0]}.yaml.ori > /절대경로/{name}/{i[0]}.yaml"	//공통 heat YAML에서 원하는 값으로 값 변경
        print(cmd)	//명령어 출력
        print(f"subprocess.Popen(['openstack','stack','create', '{name}_{i[0]}', '-t', '/절대경로/{name}/{i[0]}.yaml'])\n")	//명령어 출력

elif run == '1' :	//진짜로 실행 

    subprocess.run(['mkdir',f'/절대경로/{name}'])
    
    for i in ["첫번째 프로젝트 이름","첫번째 프로젝트 ID"], ["두번째 프로젝트 이름","두번째 프로젝트 ID"], ["세번째 프로젝트 이름","세번째 프로젝트 ID"] :
        cmd=f"sed 's/$name/{name}/g' /절대경로/{i[0]}.yaml.ori > /절대경로/{name}/{i[0]}.yaml"
        os.system(cmd)	//subprocess로 하고 싶은데 sed에 ''(작은따옴표)랑 뭐가 자꾸 에러가 떠서 os.system으로 대체.....
        envset(i[1],i[0])	
        subprocess.Popen(['openstack','stack','create', f'{name}_{i[0]}', '-t', f'/절대경로/{name}/{i[0]}.yaml'])

'Language > Python' 카테고리의 다른 글

openstack Openrc File 자동등록 스크립트  (0) 2021.06.09
Openstack Instance 자동 생성 스크립트  (0) 2021.05.17