# VNF Lifecycle Management (openstack vnflcm ***)
## 思ったこと
* メソッドの前の@はどういう意味?
>@validation.schema(vnf_lcm.instantiate)
* conductor へのinputは、RPCのみ?
* [getattr](https://cpp-learning.com/getattr/)
## list
* [tacker/api/vnflcm/v1/router.py](https://github.com/openstack/tacker/blob/master/tacker/api/vnflcm/v1/router.py#L56): {"GET": "index"}
* [/tacker/api/vnflcm/v1/controller.py](https://github.com/openstack/tacker/blob/master/tacker/api/vnflcm/v1/controller.py#L113)
* vnf_instances = objects.Vnf*InstanceList*.get_all(context)
* return self._view_builder.index(vnf_instances)
## create
* [tacker/api/vnflcm/v1/router.py](https://github.com/openstack/tacker/blob/master/tacker/api/vnflcm/v1/router.py#L56): {"POST": "create"}
* [tacker/api/vnflcm/v1/controller.py](https://github.com/openstack/tacker/blob/master/tacker/api/vnflcm/v1/controller.py#L165)
* vnf_instance = objects.VnfInstance()
* vnf_instance.create()
* return wsgi.ResponseObject(result, headers=headers)
## openstack vnflcm instantiate vnfInstanceId ./sample_param_file.json
* sample_param_file.jsonとは?
### server
* [tacker/api/vnflcm/v1/router.py](https://github.com/openstack/tacker/blob/master/tacker/api/vnflcm/v1/router.py#L66): {"PUT": "upload_vnf_package_content"}
* [tacker/api/vnflcm/v1/controller.py](https://github.com/openstack/tacker/blob/master/tacker/api/vnflcm/v1/controller.py#L256): instantiate(self, request, id, body)
* vnf_instance = self._get_vnf_instance(context, id)
* [self._instantiate(context, vnf_instance, body)](https://github.com/openstack/tacker/blob/68918dababbf2863585ca2e0d7b6212e556ee40a/tacker/api/vnflcm/v1/controller.py#L230)
* いろいろバリデーションチェックする
* [self.rpc_api.instantiate(context, vnf_instance, instantiate_vnf_request)](https://github.com/openstack/tacker/blob/68918dababbf2863585ca2e0d7b6212e556ee40a/tacker/conductor/conductorrpc/vnf_lcm_rpc.py#L31)
### conductor
* [tacker/conductor/conductor_server.py](https://github.com/openstack/tacker/blob/68918dababbf2863585ca2e0d7b6212e556ee40a/tacker/conductor/conductor_server.py#L413): instantiate(self, context, vnf_instance, instantiate_vnf)
* [tacker/vnflcm/vnflcm_driver.py](https://github.com/openstack/tacker/blob/68918dababbf2863585ca2e0d7b6212e556ee40a/tacker/vnflcm/vnflcm_driver.py#L226): vnflcm_driver.instantiate_vnf(context, vnf_instance, instantiate_vnf)
* [_instantiate_vnf(context, vnf_instance, vim_connection_info, instantiate_vnf_req)](https://github.com/openstack/tacker/blob/68918dababbf2863585ca2e0d7b6212e556ee40a/tacker/vnflcm/vnflcm_driver.py#L136)
* [_vnf_manager.invoke(tacker.tacker.vnfm.drivers, 'pre_instantiation_vnf')](https://github.com/openstack/tacker/blob/68918dababbf2863585ca2e0d7b6212e556ee40a/tacker/vnflcm/vnflcm_driver.py#L154): disk_imageをglanceに保存?
* [tacker/vnfm/infra_drivers/openstack/openstack.py](https://github.com/openstack/tacker/blob/950644b911e94a02f44665028ef042005a3c6519/tacker/vnfm/infra_drivers/openstack/openstack.py#L588):
* for node_name, vnf_sw_image in vnf_software_images.items():
* try 1個目: glance_client.create
* try 2個目:
* glance_client.import_image(if is_url)
* self._image_create_wait()
* [_vnf_manager.invoke(tacker.tacker.vnfm.drivers, 'instantiate_vnf')](https://github.com/openstack/tacker/blob/68918dababbf2863585ca2e0d7b6212e556ee40a/tacker/vnflcm/vnflcm_driver.py#L171): heatに作ってもらう
* [tacker/vnfm/infra_drivers/openstack/openstack.py](https://github.com/openstack/tacker/blob/950644b911e94a02f44665028ef042005a3c6519/tacker/vnfm/infra_drivers/openstack/openstack.py#L742)
* [self.create](https://github.com/openstack/tacker/blob/950644b911e94a02f44665028ef042005a3c6519/tacker/vnfm/infra_drivers/openstack/openstack.py#L116)
* [_create_stack](https://github.com/openstack/tacker/blob/950644b911e94a02f44665028ef042005a3c6519/tacker/vnfm/infra_drivers/openstack/openstack.py#L252)
* [_vnf_manager.invoke(tacker.tacker.vnfm.drivers, 'create_wait')](https://github.com/openstack/tacker/blob/68918dababbf2863585ca2e0d7b6212e556ee40a/tacker/vnflcm/vnflcm_driver.py#L198)
* [_vnf_manager.invoke(tacker.tacker.vnfm.drivers, 'post_vnf_instantiation')](https://github.com/openstack/tacker/blob/68918dababbf2863585ca2e0d7b6212e556ee40a/tacker/vnflcm/vnflcm_driver.py#L219): できたインスタンスの情報をheatからもらってくる
* self._get_stack_resources(inst_vnf_info.instance_id, heatclient)
* self._update_package_usage_state(context, vnf_package)