summaryrefslogtreecommitdiff
path: root/devel/image.yang
blob: 15af9f4af7e17a585cf14a3b0d072df4f3b21ee1 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
module horizon-image {
  yang-version 1.1;
  namespace 'https://horizon.adelielinux.org/ns/image';
  prefix hzimg;

  organization "Adélie Linux";
  contact
    "Horizon: https://horizon.adelielinux.org/
     Mailing list: https://lists.adelielinux.org/postorius/lists/horizon.lists.adelielinux.org/";

  description
    "Adélie Linux defines this model to provide an interface for
     describing and maintaining a list of computer images for the
     deployment of APK-based Linux distributions.

     Copyright (c) 2020 Adélie Linux and contributors.  All rights
     reserved.  Distribution is subject to the AGPL 3.0 license,
     unless otherwise explicitly granted.";

  revision 2020-03-11 {
    description "Initial revision."
  }
  revision 2020-05-12 {
    description "Flatten packages node.  Remove image-type leaf and generate action."
  }
  revision 2020-06-22 {
    description "Add PPPoE configuration support."
  }
  revision 2020-06-23 {
    description "Add service enablement."
  }

  typedef architecture {
    type enumeration {
      enum aarch64;
      enum aarch64_be;
      enum alpha;
      enum arm;
      enum armel;
      enum armhf;
      enum armv7;
      enum m68k;
      enum mips;
      enum mips32;
      enum mips64;
      enum mipsel;
      enum mips32el;
      enum mips64el;
      enum pmmx;
      enum ppc;
      enum ppc64;
      enum riscv;
      enum riscv64;
      enum s390x;
      enum x86;
      enum x86_64;
    }
    description "The CPU architecture of the target system.";
  }

  typedef ckb-keymap {
    type enumeration {
       enum us;
       enum ad;
       enum af;
       enum ara;
       enum al;
       enum am;
       enum at;
       enum az;
       enum by;
       enum be;
       enum bd;
       enum in;
       enum ba;
       enum br;
       enum bg;
       enum ma;
       enum mm;
       enum ca;
       enum cd;
       enum cn;
       enum hr;
       enum cz;
       enum dk;
       enum nl;
       enum bt;
       enum ee;
       enum ir;
       enum iq;
       enum fo;
       enum fi;
       enum fr;
       enum gh;
       enum gn;
       enum ge;
       enum de;
       enum gr;
       enum hu;
       enum is;
       enum il;
       enum it;
       enum jp;
       enum kg;
       enum kh;
       enum kz;
       enum la;
       enum latam;
       enum lt;
       enum lv;
       enum mao;
       enum me;
       enum mk;
       enum mt;
       enum mn;
       enum no;
       enum pl;
       enum pt;
       enum ro;
       enum ru;
       enum rs;
       enum si;
       enum sk;
       enum es;
       enum se;
       enum ch;
       enum sy;
       enum tj;
       enum lk;
       enum th;
       enum tr;
       enum ua;
       enum gb;
       enum uz;
       enum vn;
       enum kr;
       enum ie;
       enum pk;
       enum mv;
       enum za;
       enum epo;
       enum np;
       enum ng;
       enum et;
       enum sn;
       enum brai;
       enum tm;
       enum ml;
       enum tz;
       enum ke;
       enum bw;
       enum ph;
    }
    description "Keymaps defined by CKB.";
  }

  typedef netconfigtype {
    type enumeration {
      enum netifrc {
        description "The netifrc system, as used by Adélie";
      }
      enum eni {
        description "/etc/network/interfaces file, as used by Alpine";
      }
    }
    description
      "The network configuration system to use on the target.";
  }

  typedef address-type {
    type enumeration {
      enum none {
        description "No address set - just activate the interface.
        Commonly used for bridged interfaces.";
      }
      enum static {
        description "Static addressing.";
      }
      enum dhcp {
        description "Dynamic addressing using DHCP.";
      }
      enum slaac {
        description "Dynamic IPv6 addressing using SLAAC.";
        reference "RFC 4862: https://tools.ietf.org/html/rfc4862";
      }
    }
    description "The address type.";
  }

  typedef ssidsecurity {
    type enumeration {
      enum none;
      enum wep;
      enum wpa;
    }
    description
      "The type of wireless security to use for a given SSID.";
  }

  container images {
    list image {
      key name;
      
      leaf name {
        type string;
        description "Free-form name of this image.
        This name will not appear anywhere in the resultant image.
        It is used solely for operator identification.";
      }
      leaf hostname {
        type string;
        mandatory true;
        description "The hostname to set as the default.";
      }
      container packages {
        list package {
            type string;
        }
        description "The packages to install in the image.";
      }
      leaf rootpw {
        type string;
        mandatory true;
        description "The encrypted root passphrase.";
      }
      leaf arch {
        type architecture;
        mandatory true;
        description "The CPU architecture of the image.";
      }
      leaf language {
        type string;
        description "The default locale for the image.";
      }
      leaf keymap {
        type ckb-keymap;
        default us;
        description "The keymap to use for the image.";
      }
      leaf firmware {
        type boolean;
        default false;
      }
      container services {
        list service {
          key "service";

          leaf service {
            type string;
            description "The name of the service to enable.";
          }
          leaf runlevel {
            type string;
            description "The runlevel to enable the service.";
          }
        }
      }
      leaf netconfig {
        type netconfigtype;
        description
          "The network configuration system to use in the image.";
      }
      container netaddresses {
        list netaddress {
          key "id";

          leaf id {
            type string;
            description "Identifier for this connection.
            For operator reference only - not used in the image.";
          }
          leaf interface {
            type string;
            description "The interface used for this address.";
          }
          leaf addr-type {
            type address-type;
            description "The address type.";
          }
          container address {
            when "../addr-type[.=static]";
            mandatory true;

            leaf ip-address {
              type string;
              mandatory true;
              description "The IP address.";
            }
            leaf net-prefix {
              type uint8;
              mandatory true;
              range 1..64;
              description "The network prefix length.";
            }
            leaf gateway {
              type string;
              description "The default gateway for this address.";
            }
            description
              "Addressing information for static configuration.";
          }
        }
      }
      container pppoe_links {
        list pppoe {
          key "interface";

          leaf interface {
            type string;
            description "The interface used for this link.";
          }
          leaf mtu {
            type uint16;
            description "The MTU to negotiate for this link.";
          }
          leaf username {
            type string;
            description "The username for authenticating this link.";
          }
          leaf password {
            type string;
            description "The password/secret for authenticating this link.";
          }
          leaf lcp-echo-interval {
            type uint8;
            description "The number of seconds between LCP echo requests.";
          }
          leaf lcp-echo-failure {
            type uint8;
            description
              "The number of echo request failures before this link is failed.";
          }
        }
      }
      container nameservers {
        list nameserver {
          type string;
          description "The IP address of a DNS server.";
        }
      }
      container access-points {
        list netssid {
          key "interface ssid";
          
          leaf interface {
            type string;
            description "The wireless interface to use for this SSID.";
          }
          leaf ssid {
            type string;
            description "The SSID with which to associate.";
          }
          leaf security {
            type ssidsecurity;
            description "The security type of the specified SSID.";
          }
          leaf passphrase {
            when 'not(../security[.=none])';
            type string;
            description "The shared secret for the specified SSID.";
          }
        }
      }
      leaf timezone {
        type string;
        default "UTC";
        description "The local time zone in the image.";
      }
      container repositories {
        list repository {
          type string;
          description "A repository URL.";
        }
      }
      container signingkeys {
        list signingkey {
          type string;
          description "A path or URL to an APK signing key.";
        }
      }
      container users {
        list account {
          key username;

          leaf username {
            type string;
            description "The login name of this account.";
          }
          leaf alias {
            type string;
            description "The friendly alias/GECOS of this account.";
          }
          leaf passphrase {
            type string;
            description
              "The encrypted password this account uses to log in.";
          }
          leaf groups {
            type string;
            description
              "Comma-separated list of this account's member groups.";
          }
        }
      }
    }
  }
}