talos

Форк
0
70 строк · 1.3 Кб
1
// This Source Code Form is subject to the terms of the Mozilla Public
2
// License, v. 2.0. If a copy of the MPL was not distributed with this
3
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
4

5
package qemu
6

7
import (
8
	"fmt"
9
	"io"
10
	"os"
11

12
	"github.com/siderolabs/talos/pkg/provision/providers/vm"
13
)
14

15
//nolint:gocyclo
16
func (p *provisioner) createPFlashImages(state *vm.State, nodeName string, pflashSpec []PFlash) ([]string, error) {
17
	var images []string
18

19
	for i, pflash := range pflashSpec {
20
		if err := func(i int, pflash PFlash) error {
21
			path := state.GetRelativePath(fmt.Sprintf("%s-flash%d.img", nodeName, i))
22

23
			f, err := os.Create(path)
24
			if err != nil {
25
				return err
26
			}
27

28
			defer f.Close() //nolint:errcheck
29

30
			if err = f.Truncate(pflash.Size); err != nil {
31
				return err
32
			}
33

34
			if pflash.SourcePaths != nil {
35
				for _, sourcePath := range pflash.SourcePaths {
36
					var src *os.File
37

38
					src, err = os.Open(sourcePath)
39
					if err != nil {
40
						if os.IsNotExist(err) {
41
							continue
42
						}
43

44
						return err
45
					}
46

47
					defer src.Close() //nolint:errcheck
48

49
					if _, err = io.Copy(f, src); err != nil {
50
						return err
51
					}
52

53
					break
54
				}
55

56
				if err != nil {
57
					return err
58
				}
59
			}
60

61
			images = append(images, path)
62

63
			return nil
64
		}(i, pflash); err != nil {
65
			return nil, err
66
		}
67
	}
68

69
	return images, nil
70
}
71

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.