►
A
A
Sure,
basically,
what
we
want
to
do
is
to
add
the
the
remote
development
module
to
to
the
gitlab
agent,
which,
as
of
right
now,
at
least
for
the
first
iteration,
we're
thinking
of
just
having
Agent
K
call
the
kitlab
rails
API
directly
through
a
helper
interface,
I
think
through
some
helper
struct
interface
functions
that
are
already
in
in
the
GitHub
agent.
So,
basically,
you
would
avoid
having
to
code
anything
for
the
server
side
for
the
cast
side
and
only
have
to
go
for
the
agent
K
side.
A
But
we
won't
get
away
with
is
having
no
optimization
whatsoever,
as
in
we
will
have
a
configuration
value
for
whether
it
should
be
turned
on
or
off,
and
if
it's
on
it'll
be
infinitely
polling,
every
10
seconds
or
whatever
we
configure
it
to
and
then
maybe
later
we'll
make.
Some
or
later
we
will
likely
make
some
efficiency
improvements
so
that
it's
not
pulling
continuously.
A
But
that's
basically
it
and
what
right
now
I,
like
the
immediate
helper
I,
want
right
now
is
basically
to
run
the
the
gitlab
agent
locally.
I've
had
success,
running
the
server
side,
it's
up
here,
but
the
agent
side,
Agent
K
I'm
having
this
error,
I
haven't
looked
into
it
really
deeply
like
this
is
just
like
last
20
minutes
stuff.
So
I
I,
don't
know
what
could
happen
here.
C
So
I
followed
like
there
there's
the
instructions
that
we
have
in
the
the
architecture:
dots
like
remote,
Dev
architecture,
docs,
and
then
they
reference
the
setup
docs
that
are
in
Agent
K.
Does
this
mean
like
I,
know,
there's
a
host
file,
entry,
I,
don't
know
if
that's
maybe
part
of
it.
What
do
you
think
Michael.
D
A
It's
not
run
as
part
of
GDK,
yes,
and
no
like
I,
configure
GDK
to
run
the
gitlab
agent,
but
then
stopped
that
GDK
run
agent.
So
I
can
run
my
local
checked
out.
Branch
of.
A
A
There's
like
there's
like
eight
different,
the
setup
instructions,
so
I'm
a
bit
lost
in
the
in
that.
D
Forecast
the
gitlab
currents
agent,
blah
blah
blah
Yama
in.
B
D
Oh
okay,
it's
potentially
external
address,
yeah
like
its
own
URL,
basically,
and
that
is
used
later
by
other
class
instances
to
connect
to
discuss
instance,
because
you
may
have
a
crazy
network
setup
like
reverse
proxy
in
front
of
which
Castle
a
sidecar
or
something
crazy
like
that.
It's
a
separate
thing
basically.
C
B
D
B
A
D
So
which
instructions
did
you
follow
because
I
I
know
about
the
instructions
in
the
gtk,
Repository
and
I
think
they
are
correct?
I
think
they
tell
you
to
set
up
the
for
stylus.
B
A
This
is
what
I
was
looking
at.
A
C
D
Yeah,
we
should
probably
consider
that
this
Docs
yeah
we
initially
had
dogs
here
them
other
dogs
to
GDK.
They
were
a
little
bit
different
now,
I'm,
actually
not
sure.
What
is
there
because
I
don't
remember.
C
D
Right
instructions
because
they
tell
you
to
set
up
TLS,
set
up
the
hostelius
and,
and
so.
B
C
A
Yeah
one
is
in
in
the
gitlab
agent
repo
and
what
is
in
the
GDK
repo,
okay,.
C
Right
and
the
one
in
the
GDK
repo
like
halfway
down,
if
you
scroll
a
little
bit,
let's
go
a
little
bit
like
those
links
there.
Now
you
just
passed
them.
Those
ones
like
go
to
the
the
one
above
it
I
think
like
isn't
that,
maybe
not
those
are
the.
D
You
you
don't,
because
you
want
to
run
it
locally,
your
modified
version.
You
see
there
are
different
use
cases
right.
There
is
a
use
case
where
someone
wants
to
use
it
with
GDK,
but
they
are
not
developing
the
agent
they
want
to,
for
example,
develop
front-end
and
use
the
agent
to
access,
kubernetes,
API
or
backend
for
gitlab.
C
D
C
D
D
Options,
no,
not
really
not
really.
This
difference
here
is
more
like
historical
than
we
initially
had
instructions
in
the
main
reports
during
the
United
instructions
in
GDK,
and
then
they
got
better
and
these
instructions
kind
of
became
out
of
date
and
also
we
kept
adding
features
that
needed
more
of
rails.
So
you
would
and
read
GDK
basic
it's
about
locally.
D
C
A
I
think
I
got
to
that
page
from
a
link,
but
I
think
it
was
just
a
link
and
it
was
not
additional
instructions.
So.
A
D
A
D
A
And
that's
this:
this
configuration
the
look
back,
alias.
D
That's
loadback
yeah.
The
Alsip
is
needed
for
running
accessing
from
docker.
D
D
B
C
A
Likely
this
should
link
to
the
to
the
documentation.
C
A
Gdk
documentation,
rather
the
gitlab
agent
documentation
which
links
to
the
GDK
documentation
this
documentation,
which,
linked
to
this
one.
A
Yeah
I
mean
it
is
separate
documentation,
because
this
is
specific
to
remote
development.
This
is
setting
up
nginx
setting
up
the
dev
workspace
operator,
which
is
solely
for
remote
development,
and
this
part
is
up
for
me
as
well.
This
is
where
I
started.
A
D
Yeah,
that's
a
recent
addition
that
way
it
doesn't
use
bazo
it
uses,
go
run,
accent,
HK
does.
A
B
B
B
A
To
be
completely
honest,
I
don't
tend
to
use
an
editor
except
for
them
which
works
well
when
I
know
my
way
around
the
code.
In
this
case,
I,
don't
I,
don't
think.
I
have
three
stones.
A
D
C
D
Is
called
lord
loopback
aliens,
but.
D
C
A
Yeah,
this
is
the
section
within
the
GDK
documentation
on
the
kubernetes
agent,
but
that
links
us
no
as
a
number
three
step
to
set
up
a
loopback,
ABS
ID,
which
is
exactly
what
Mikhail
is
saying.
It's
a
more
General
page
for
for
gtk.
C
Okay,
so
the
under.
C
D
In
this
area,
yes,
yes,
yes,
what
do
you
have
there
at
the
moment.
B
C
C
D
I,
don't
remember
where
it
was,
but
it
was.
It
was
somewhere
there.
A
A
Server,
this
is
the
helper
function
that
is
called
from
the
one
that
can
make
a
request
through
cast
and
grpc
all
the
way
to
rails,
using
http
yeah.
C
C
D
Yeah,
okay,
is
it
Capital
API.
C
C
A
D
Yep
and
then
here
well
another
thing
that
you
need
between.
C
D
Need
the
polling
configuration
so
I
guess,
comment
out
everything
here
and
you
can
do.
D
D
C
D
B
A
D
So
here
you
just
construct
the
config
in
your
factory,
so
CTX
and
then
config
will
be
a
field
in
the
worker.
C
C
A
The
year
and
not.
A
Paul
with
backoff
basically
has
three
Fields
three
parameters:
context
the
config
and
the
function
that
runs
every
poll.
Yes,.
C
D
Yep
here,
one
of
them
any
of
them,
okay,
this
one
is
good
enough.
Yep.
D
A
C
A
Few
and
then
we
add
a
new
field
to
to
the
worker
quote:
have
that
config.
D
You
you
need
to
put
that
right
into
the
worker
literal
okay,
online.
A
C
A
Okay,
then,
does
that
mean
that
at
least
for
get
UPS
the
config
we're
setting
is
defined
in
code?
There's
not.
C
D
A
D
A
I
mean
we
could
probably
rename
it
and
it
it
seems
like
it's
like
githubs,
has
two
different
polling
configurations:
yeah.
We
can
leave
those
names
for
now,
but
I
mean
we're
not
installing
anything.
It
could
be
like
polling
for
work.
You
need
to
back
off
calling
for
work
Max
back
off
or
just
if
it's
just
one
type
of
polling,
we
can
just
remove
the
the
the
prefix.
D
A
C
C
B
D
C
D
B
C
D
C
B
D
B
C
D
I
know
brace
and
parenthesis
now:
yeah
I
just
forgot.
A
D
Because
because
it
returns
that
error,
only
if
the
attempt
result
is
done
so
it's
actually
think
about
it
as
a
result,
value
rather
than
the
error
of
Declaration.
It's
like
a
slightly
different
idea.
C
A
Yeah
you.
A
That
just
continues
this
is
already
well,
it's
not
pulling
anything,
but
it's
already
looping,
with
with
a
certain
wait
time.
D
A
A
Done
does
it
have
the
required
format
for
the
path.
A
A
A
C
It's
really
good
and
typescript
and
I
think
in
the
gitlab
code
base,
because
it's
all
open
source
and
it's
Ruby.
D
A
A
Yeah!
Exactly
because
that
one
did
a
request
similar
to
the
one
we're
trying
to
make.
A
C
D
Take
this
and
well.
A
You
can
separate
the
logic
yeah
yeah,
especially
when
you're
starting
to
test,
and
you
feel
like
its
own
function,
might
might
work
well.
D
A
Yeah
I
mean
the
red
body.
Struct
doesn't
exist
here,
but
we
can
just
for
now
just
use
a
map
or
something
map.
D
B
D
With
just
one
request
board,
you
will
Marshall
it
into
a
byte
slice
suggestions:
send
it
yeah
to
send
it
to
the
server
it
will
send,
set
content
type
and
set
accept.
If
you
well
actually
to
accept
a
reply,
you
need
to
provide
the
response
Handler.
You
can
see
an
example
of
that
in
the
in
the
code
you
copied
this
from
in
the
file
before
when
you
copy
this
from
here.
Above,
maybe
not
here.
D
Well,
this
one
okay,
I'm
I'm
confused.
This
is
the
example
there's
just
another
thing
that
I'm
I
got
confused
about,
but
yeah.
A
C
A
C
C
C
C
So
shekhar
like
had
a
like
the
data
structure
he
was
using,
is
probably
a
pretty
good
start.
I
was
just
going
to.
D
C
A
A
D
C
D
A
C
He's
building
the
same
thing
based
off
of
agent:
git
live
agent
for
kubernetes,
but
he's
going
down
a
path
of
that's,
not
necessarily
tied
to
the
network
space
operator
and
he's
also
doing
more
of
the
an
event-driven
approach,
as
opposed
to
polling.
C
So
here
is
like
the
API
endpoints,
like
what
I
threw
together
as
as
a
starting
point,
and
we
could
put
whatever
we
want
in
there
like
to
start
with.
I
just
had
work,
requests,
I.
Think
it'll
be
like
the
agent
ID
that
I
don't
even
know.
It's
gonna
be
a
project
ID.
Maybe
this
doesn't
have
to
be
tied
to
a
project
right,
but
the
agent
ID
that
works
base
ID
and
the.
C
Yeah
anyway,
workspace
IDs
and
the
and
there
any
workspace
IDs
and
the
events
for
each
one
actual
state
or
events
yeah
yeah
we're.
A
Talking
we're
talking
request
or
response
the.
C
C
A
Will
it
would
be
like
the
list
of
kubernetes
events
related
to
each
of
those
workspaces.
C
Right
so
it
can
be.
Let
me
just
start
with
that,
just
something
simple,
so
the
agent
here's
thing
something
I'm
still
vague
on
Mikhail
the
the
agent
ID
we
have
to
that's
like
handled
by
something
automatically
like
how
do
we.
C
Like
do
we
need
the
agent's
ID
or
like
with
this
architecture,
we
don't
like
we're
just
going
to
respond
to
whatever
request
we
got.
We
don't
care
about.
D
It
so
you
you
need
to
ensure
there
is
authentication
and
I
think
on
the
server
side,
obviously,
and
I
think
this
is
handled
in
this
file
somewhere,
like
above
there's
like
yeah.
C
C
C
D
D
Other
place
this
premium
features
this.
C
D
Then
you
in
the.
D
A
A
D
So
agent
sends
the
agent
token
to
cast
to
authenticate
Cass
uses
JWT
secret,
but
also
it
sends
that
talking
to
rails.
So
using
that
token
rails
looks
it
up
in
the
database
and
then
it
has
the
entity
of
the
agent
and
that
has
the
ability
of
the
agent.
Obviously,
so
that's
how
you
get
the
agent
ID
that
can
be
spoofed.
A
D
Well,
I,
don't
understand,
like
agent
starts,
it
has
the
URL
and
the
token
it
doesn't
know
its
own
agent
ID.
It
needs
to
get
the
configuration.
It's
called
this
API
and
that
that
API
Returns
the
agent
ID
to
the
agent.
Then
it
uses
it
for
logging
and
blah
blah
blah.
It
never
needs
to
send
it
back
to
rares.
So.
C
D
Probably,
why
wait
wait,
wait,
wait.
I
am
confused
I'm
con.
B
D
Is
that
there
are
two
apis,
one
is
get
configuration,
that's
the
API
of
cast
and
that's
what
I
was
talking
about,
and
this
is
a
separate
thing.
This
is
where
it
cast
posts,
agents
configuration
too.
This
is
not
called
by
the
agent.
This
is
called
by
cast
only
and
that's
where
cast
needs
to
pass
the
ID
of
the
agent
for
which
it
also
sends
the
configuration.
So
here
it
is
the
right
thing
to
do
because
cast
can
call
the
CPI
with
any
agent
ID
for
which
it
has
the
configuration.
We
trust
us.
D
D
C
D
C
B
D
C
C
Yeah
so,
and
to
start
with
it's
just
like
an
array
of
struts,
which
is
the
you
know,
some
identifier
for
the
workspace
and
its
actual
State
and
or
or
the
the
list.
C
C
And
I
did
like
write,
take
a
little
bit.
C
C
But
anyway,
like
this
is
exactly
what
I
was
saying
like
I
minimally
documented
it,
we
get
the
timestamp
at
the
most
recent
event,
so
like
we're
going
to
send
an
array
abstracts,
which
is
the
workspace
application,
identifier
and
an
array
of
the
events
and
then
the
timestamp
of
the
most
recent
event
right
in
there
that
is
sent
and
then,
if
rails,
like
applied
those
successfully
yep
everything's
done.
Maybe
I
sent
some
work
back.
Maybe
I
didn't,
but
it
echoes
back
that
time
stamp
and
then
this
is
going
to
be
in
memory.
C
C
B
A
C
Yep
we're
getting
there
I
think
just
like,
as
of
Friday,
and
yesterday,
we've
like
formalized
this
polling
architecture
and
with
mikhail's
help,
so
we
just
need
to
flesh
it
out
generate
on
the
structures
the
one
thought
I
had
is
like.
Yes,
we
need
to
hook
this
up
to
kubernetes
in
the
network
space
operator,
but
maybe
just
like
have
a
you
know:
a
mock,
a
fake
implementation
of
it
that
just
like
logs
to
the
console.
C
C
C
A
Looked
for
workstation,
it's
just
a
typo!
If
you
notice,
under
the
title
engine
K,
even
timestamps.
This
is
to
for
each
workstation.
A
C
A
Least,
at
this
point,
eventually,
it
could
be
a
VM,
but
at
least
at
this
point
it's
a
Docker
container
that
contains
contains
a
remote
development
environment
and
then
maybe
just
to
hedge,
our
documentation
a
little
bit.
If
you
see
the
word
workstation,
it
is
mistaken
and
it's
supposed
to
be
workspace.
Yeah.
C
A
A
bit
worse,
if
there
were
some
other
questions,
but
I
think
we
used
this
time
productively,
at
least
for
the
two
of
us
I.
Don't
know
if
we
tell
things
the
same
thing,
but.
C
So
before
you
yeah
before
enjoy
your
vacation
Kyle
and
then
the
holidays
like
if
you
have
any
like
major
concerns
that
we're
going,
that
we
need
to
be
thinking
about
or
going
down
the
wrong
path
or
just
keep
iterating
and
fleshing
this
out.
A
I
think
the
biggest
blockers
are
the
lack
of
definition,
which
we
are
like
constantly
working
on
every
every
one
of
these
meetings.
We
drill
a
bit
a
little
bit
deeper
on
on
what
we
need
to
be
doing
right,
I
think
we'll
be
firmer
on
whether
we
deliver
it
at
the
point
where
Charter
was
talking
about
where,
like
we
know
exactly
what
to
do,
and
we
can
clearly
parallelize
all
of
the
work.
C
B
D
A
C
D
D
A
Just
with
your
acknowledgments
yeah,
that's
why
we're
not
getting
work
that
that's!
That
would
be
like
the
second
iteration
we're
not
getting
work.
We're
just
we're.
Take
like
technically
we're
pushing
and
pulling
in
the
same
HTTP
request,
yeah
we're
pushing
the
events
and
pulling
any
work
as
as
well
as
the
acknowledgments
of
the
events
we
sent.
C
A
C
D
D
No
I
think
it
sounds.
Fine
I
don't
have
any
concerns
from
the
Tactical
perspective,
at
least.